gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 21:16:56 25 4
gpt4 key购买 nike

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

关于Lua 字符串转数字 - 不要使用 e 表示法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53624895/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com