我有以下测试用例:
Lua 5.3.2 Copyright (C) 1994-2015 Lua.org, PUC-Rio
> foo = 1000000000000000000
> bar = foo + 1
> bar
1000000000000000001
> string.format("%.0f", foo)
1000000000000000000
> string.format("%.0f", bar)
1000000000000000000
Run Code Online (Sandbox Code Playgroud)
最后一行应该是1000000000000000001,因为这是价值bar,但由于某种原因,它不是.这不仅适用于1000000000000000000,我还没有找到另一个给出正确值的数字.任何人都可以解释为什么会发生这种情况?
您将数字格式化为浮点数,而不是整数.这就是%.0f正在做的事情.在某些时候,浮标会失去精确度.double例如,在大约16个十进制数字后将失去精度.
如果要将整数格式化为整数,则需要使用标准printf规则将其格式化为整数:
string.format("%i", bar)
Run Code Online (Sandbox Code Playgroud)