当我在Lua中执行0.1 + 0.2
时,我得到了0.3
。如果我在Ruby或Python中做同样的事情,我得到0.30000000000000004
。我理解浮点舍入错误,但为什么Lua中不会出现这个问题呢? Lua的做法有何不同?
答案 0 :(得分:8)
0.1+0.2
不完全是0.3
。试试这段代码:
print((0.1+0.2)==0.3)
print(string.format("%.17g",0.1+0.2))
我假设您使用print
或io.write
来打印这些值。在这种情况下,Lua只是不打印所有数字。在内部,Lua使用全长的本机浮点表示。技术说明是使用print
中定义的io.write
格式的LUA_NUMBER_FMT
和luaconf.h
格式编号,默认情况下为"%.14g"
。