2012-03-11 2699 views
26

尽管Lua没有区分浮点数和整数,但在某些情况下,当您要使用整数时。如果你不能做类似C的演员或者没有像Python的int这样的东西,那么将数字转换为整数的最好方法是什么?Lua:从float转换为int

例如计算

IDX =位置阵列的索引时/宽度

你如何能够确保idx是一个有效的数组索引?我想出了一个使用string.find的解决方案,但也许有一种使用算术的方法显然会快得多。我的解决办法:

function toint(n) 
    local s = tostring(n) 
    local i, j = s:find('%.') 
    if i then 
     return tonumber(s:sub(1, i-1)) 
    else 
     return n 
    end 
end 

回答

41

你可以使用math.floor(x)

Lua Reference Manual

返回的最大整数小于或等于x。

+3

你可以扩展这个答案,通过投掷一些条来处理负数:'math.floor(math.abs(x))' – Ziggy 2015-10-21 05:00:09

2

为什么不只是使用math.floor()?只要分子和分母是非负数和有效范围,它就会使指数有效。

3

@Hofstad与math.floor(Number x)建议消除小数点右侧的提示是正确的,您可能需要舍入。没有数学,但它如同math.floor(x + 0.5)一样简单。你想回合的原因是因为花车通常是近似的。例如,1可以是0.999999996

12.4 + 0.5 = 12.9,地板12

12.5 + 0.5 = 13,地板13

12.6 + 0.5 = 13.1,地板13

local round = function(a, prec) 
    return math.floor(a + 0.5*prec) -- where prec is 10^n, starting at 0 
end 
2

Lua 5.3引入了一个新的操作符,称为floor division,表示为//

例如吹

的Lua 5.3.1版权(C)1994年至2015年Lua.org,PUC-力

> 12 // 5

的详细信息可能被发现在lua reference