由于某种原因,如果我执行以下操作,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
这样的数字,我不想将其解释为整数......
答案 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