Lua的浮点数处理与其他语言有何不同?

当我在 Lua 中执行 0.1 + 0.2 时,我得到的结果确切为 0.3。但如果我在其他编程语言中比如 Ruby 或 Python 中执行相同的操作,则会得到 0.30000000000000004。我知道这是浮点数精度舍入误差,但为什么 Lua 中不会出现这个问题呢?Lua 做了哪些不同的处理方式?

点赞
用户107090
用户107090

0.1+0.2 并不完全等于 0.3。尝试以下代码:

print((0.1+0.2)==0.3)
print(string.format("%.17g",0.1+0.2))

我假设您正在使用 printio.write 打印这些值。 在这种情况下,Lua只是没有打印所有的数字。在内部,Lua 使用完整长度的本地浮点表示。技术解释是 printio.write 使用在 luaconf.h 中定义的 LUA_NUMBER_FMT 格式来格式化数字,默认情况下为 ".14g"

2013-08-01 21:49:39