stringify()将整数转换为指数



我有一个记录

[
"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
1000000000000000000000
],

JSON.stringify()将其转换为形式

[
"5GrwvaEF5zXb26Fz9rcQpDWS57CtERHpNehXCPcNoHGKutQY",
1e+21
],

JSON.stringify()以同样的方式写它,这能以某种方式解决吗?

JSON.parse不会将其转换为1e+21,而是将其转换成一个数字,当以通常的方式转换为字符串时,该数字将作为字符串"1e+21"输出。但无论你把它写成1000000000000000000000还是1e+21,这个数字都是一样的。

CCD_ 7可以以任意一种形式输出它;两者都是有效的JSON数字,并且都定义了完全相同的数字。


我应该注意,在JavaScript(或任何其他使用IEEE-754双精度浮点数[实际上是单精度浮点数]的语言(中,您需要注意这种大小的数字。这个数字完全在偶数整数可能不精确表示的范围内。任何大于9007199254740992(Number.MAX_SAFE_INTEGER + 1(的数字都可以具有精确表示,也可以不具有精确表示。碰巧1000000000000000000000(你的数字(是这样,但例如9007199254740,993没有,也没有任何奇数。在某个时刻,你会发现只有4的倍数可以表示;然后它只是8的倍数,等等。查看这个问题的答案了解更多信息。

如果您仍然需要将1e+21作为1000000000000000000000,则可以使用(1e+21).toLocaleString().split(',').join('')

但实际上,如果你想把它用作一个数字,你不需要转换它,因为它们是绝对相同的。

相反,您可以将数字保留为字符串,并在需要将其用作数字时使用+'1000000000000000000000'parseInt('1000000000000000000000')

最新更新