Lua字符串转换为数字-请勿使用符号

时间:2018-12-05 03:47:58

标签: lua

我有一个代表大数字的字符串,不超过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的整数?

1 个答案:

答案 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))