大型lua号码打印错误

Med*_*her 3 lua int64

我有以下测试用例:

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,我还没有找到另一个给出正确值的数字.任何人都可以解释为什么会发生这种情况?

Nic*_*las 5

您将数字格式化为浮点数,而不是整数.这就是%.0f正在做的事情.在某些时候,浮标会失去精确度.double例如,在大约16个十进制数字后将失去精度.

如果要将整数格式化为整数,则需要使用标准printf规则将其格式化为整数:

string.format("%i", bar)
Run Code Online (Sandbox Code Playgroud)