Lua:从float转换为int

时间:2012-03-11 11:24:05

标签: lua floating-point

尽管Lua没有区分浮点数和整数,但在某些情况下你想要使用整数。如果你不能做类似C的演员或没有类似Python 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

4 个答案:

答案 0 :(得分:47)

您可以使用math.floor(x)

来自Lua Reference Manual

  

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

答案 1 :(得分:5)

@Hofstad正确的math.floor(Number x)建议消除小数点右边的位,你可能想要舍入。没有math.round,但它就像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 :(得分:5)

Lua 5.3引入了一个名为floor division并由//表示的新运算符

以下示例:

  

Lua 5.3.1版权所有(C)1994-2015 Lua.org,PUC-Rio

     

> 12 // 5

     

2

可以在lua manual

中找到更多信息

答案 3 :(得分:2)

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