在节点 v0.8.15 和萤火虫中试过这个:
(123123123123123123123).toString(10)
结果:
'123123123123123130000'
有谁知道发生了什么?
在节点 v0.8.15 和萤火虫中试过这个:
(123123123123123123123).toString(10)
结果:
'123123123123123130000'
有谁知道发生了什么?
JavaScript 将数字存储为 64 位浮点 IEEE 754 值,因此最大精度为 2^53 (9007199254740992)。除此之外的任何东西,最低有效数字都设置为 0。
例如:
(9007199254740992).toString() // 9007199254740992
(90071992547409925).toString() // 90071992547409920
(900719925474099255).toString() // 900719925474099200
// etc
如果您真的需要这么多位的精度,您应该查看诸如bignum之类的库(作者很有帮助地列出了其他此类库)。
javascript 中的所有数字(与许多其他语言不同)都存储为(AFAIK 64 位)浮点数(从不整数)。
如果你不熟悉它是如何工作的,它就像科学记数法(AKA 标准形式):a * 10 b
当您键入 123123123123123123123 时,它太大而无法放入a
浮动部分。的值a
将存储为 1.2312312312312313,截断最低值溢出数字,并b
设置为 20 以提供尽可能好的原始值近似值。当你得到字符串值时,1.2312312312312313 * 10 20被计算出来,得到 123123123123123130000。