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