0

在节点 v0.8.15 和萤火虫中试过这个:

(123123123123123123123).toString(10)

结果: '123123123123123130000'

有谁知道发生了什么?

4

2 回答 2

2

JavaScript 将数字存储为 64 位浮点 IEEE 754 值,因此最大精度为 2^53 (9007199254740992)。除此之外的任何东西,最低有效数字都设置为 0。

例如:

(9007199254740992).toString()    // 9007199254740992
(90071992547409925).toString()   // 90071992547409920
(900719925474099255).toString()  // 900719925474099200
// etc

如果您真的需要这么多位的精度,您应该查看诸如bignum之类的库(作者很有帮助地列出了其他此类库)。

于 2013-08-26T21:01:16.407 回答
2

javascript 中的所有数字(与许多其他语言不同)都存储为(AFAIK 64 位)浮点数(从不整数)。

如果你不熟悉它是如何工作的,它就像科学记数法(AKA 标准形式):a * 10 b

当您键入 123123123123123123123 时,它太大而无法放入a浮动部分。的值a将存储为 1.2312312312312313,截断最低值溢出数字,并b设置为 20 以提供尽可能好的原始值近似值。当你得到字符串值时,1.2312312312312313 * 10 20被计算出来,得到 123123123123123130000。

于 2013-08-26T21:08:25.177 回答