Lua的math.floor函数返回错误的值

下面是我的代码:

for k,v in pairs(result) do
  result[k] = math.floor(v*1000)/1000
  if k == 215 then
     print(v, math.floor(v*1000))
  end
end
for k,v in pairs(extra) do
  extra[k] = math.floor(v*1000)/1000
end

其中

result[215] = 113

但是当我在C++ Lua-Tinker中运行时,我得到以下输出:

113, 112999

这非常令人困惑!

点赞
用户4213109
用户4213109

感谢 Egor Skriptunoff,我得到了答案。

这里有一个例子:

local num1 = 100 + 1300/100
print(num1, math.floor(num1))

local num2 = (1 + 13/100) * 100
print(num2, math.floor(num2))

下面是结果:

113 113
113 112

实际上,num2 = 112.9999999999999...,因为 13/100 的缘故。但使用 print 显示时,会有一个四舍五入的过程:

local a=112.99999999999 --(9 的个数是 11)
print(a)
local b=112.999999999999 --(9 的个数是 12)
print(b)

结果为:

112.99999999999
113
2018-03-05 03:57:38