Lua:从float转换为int

Lua:从float转换为int,lua,floating-point,Lua,Floating Point,尽管Lua不区分浮点数和整数,但在某些情况下,您需要使用整数。如果不能执行类似C的强制转换,或者没有Python的int之类的东西,那么将数字转换为整数的最佳方法是什么 例如,在计算中的数组索引时 idx=位置/宽度 如何确保idx是有效的数组索引?我已经提出了一个使用string.find的解决方案,但也许有一种方法使用的算术显然要快得多。我的解决方案: function toint(n) local s = tostring(n) local i, j = s:find('%

尽管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

您可以使用
math.floor(x)

从:

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


为什么不直接使用
math.floor()
?只要分子和分母是非负的且在有效范围内,它就可以使索引有效。

@Hofstad使用
math.floor(数字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


Lua
5.3
引入了一个新的操作符,称为
楼层划分
,用
/

示例如下:

Lua 5.3.1版权所有(C)1994-2015 Lua.org,临市局里约

>12//5

二,


更多信息可以在

中找到,你可以通过添加一些条扩展这个答案来处理负数:
math.floor(math.abs(x))
当然-但是你需要在之后重新输入符号,否则你对int的转换也是一个abs()
local round = function(a, prec)
    return math.floor(a + 0.5*prec) -- where prec is 10^n, starting at 0
end