由于某些原因,如果我执行以下操作,Lua不会将整数解释为整数:(integer%1
应该是0
,但在本例中,我将显示它实际上是
x = 4
for i=1,25 do
x = x - 0.04
end
print(x) -- 3
print(x%1) -- 1
print(math.ceil(x) == x) --false
print(math.ceil(x)) -- 3
也许这是一个bug,但有办法躲避它吗?这对我来说真的很重要。(不,我不能使用math.ceil(x)
,因为我有像2.4
这样的数字,我不想把它们解释为整数…
这不是Lua特有的问题,几乎所有其他编程语言都会表现出类似的行为。
浮点数字只能精确地表示二次幂的倍数(这也包括整数)。由于0.04(1/25)不是二次幂,因此您的中间值(包括2.4)无法用浮点数精确表示,因此会有一些小的舍入误差。当你打印它们时,它们看起来会很好,因为打印算法会写下最接近的小数,但内部表示将而不是精确为2.4
我建议重构你的程序,使用整数而不是分数。对于内部表示,将所有值都乘以25(因此2.4将为60),并递增和递减1,而不是0.04。当你真正需要使用这些值时,你可以将它们除以25,得到不精确的浮点表示。
顺便说一句,试着打印x-3
。这将表明x
略小于3