Lua将整数解释为非整数



由于某些原因,如果我执行以下操作,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

最新更新