Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua字符串到数字-不要使用e表示法_Lua - Fatal编程技术网

Lua字符串到数字-不要使用e表示法

Lua字符串到数字-不要使用e表示法,lua,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 它丢失了一些数字。有没有一

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

“3435939477110523131”
太大,无法准确地存储在lua 5.1中

我们可以通过以下方式看到这一点:

local a=“3435939477110523131”
本地电话号码=电话号码(a)
本地计算机成员=3435939477110522900——这是数字'a'结束为。
打印(我们的编号==计算机编号)
在lua 5.1中,这将打印为真,您可以在lua 5.1中准确存储的最大整数为
2^53-1
,即
9007199254740991


print将尝试使用将其参数转换为字符串,对于一个数字,这将导致科学记数法,而您无法捕获所有精度

通过使用
string.format

str=“3435939477110523131”
num=tonumber(str)
打印(str,num,string.format(“%.f”,num))

在5.3版中,如果将
string.format
“%.f”
一起使用,则会得到错误的结果,请改用
tostring
“%.i”


Lua5.1数字是
double
(最大整数值是
2^53
,小于
10^16
),要精确打印它们,请使用
print(“.f”):format(n))
Lua5.3+整数最多是
2^63
(19位),如果您正在寻找的话,它支持任意精度的数字。@PaulKulchenko,如果只需要整数也可以。
str = "3435939477110523131"
num = tonumber(str )

print(str, num, tostring(num), string.format("%.i",num), string.format("%.f",num))