Lua将整数解释为非整数

时间:2013-12-02 19:36:59

标签: lua numbers integer division

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

可能这是一个错误,但有没有办法逃避呢?这对我来说非常重要。 (不,我不能使用math.ceil(x),因为我有2.4这样的数字,我不想将其解释为整数......

1 个答案:

答案 0 :(得分:4)

这不是Lua特定的问题,几乎所有其他编程语言都会表现出类似的行为。

Floating point numbers只能精确地表示两个幂的倍数(这也包括整数)。由于0.04(1/25)不是2的幂,因此您的中间值(包括2.4)不能用浮点数精确表示,因此会出现一些小的舍入误差。打印时它们看起来很好,因为打印算法会记下最接近的小数,但内部表示正好是2.4

我建议重构你的程序以使用整数而不是分数。对于你的内部表示,保持一切乘以25(所以2.4将是60),并递增和递减1而不是0.04。当您确实需要使用这些值时,可以将它们除以25以获得不精确的浮点表示。

BTW,尝试打印x-3。这将显示x略小于3