我有一个代表大数字的字符串,不超过19个数字,例如“ 3435939477110523131”,我想将其从字符串转换为数字,然后再转换回数字。 但是当我使用tonumber()时,它会转换为E表示法,这非常愚蠢。
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> a = "3435939477110523131"
> print(tonumber(a))
3.4359394771105e+18
它丢失一些数字。有没有办法将其转换为不带e的整数?
答案 0 :(得分:0)
"3435939477110523131"
太大,无法在 lua 5.1 中准确存储
我们可以通过以下方式看到这一点:
local a = "3435939477110523131"
local ourNumber = tonumber(a)
local computersNumber = 3435939477110522900 --this is the number `a` ends up as.
print(ourNumber == computersNumber)
在 lua 5.1 中这将打印 true,您可以在 lua 5.1 中准确存储的最大整数是 2^53 - 1
,即 9007199254740991
print 将尝试使用将其参数转换为字符串,对于一个数字,这会导致科学记数法并且您无法捕获所有精度。
您可以通过使用 string.format
str = "3435939477110523131"
num = tonumber(str)
print(str, num, string.format("%.f",num))
在 5.3 版中,如果您将 string.format
与 "%.f"
一起使用,您将得到错误的结果,请改用 tostring
或 "%.i"
str = "3435939477110523131"
num = tonumber(str )
print(str, num, tostring(num), string.format("%.i",num), string.format("%.f",num))