在jsconsole.com或Web Inspector中粘贴数字t=3.7333333258105216E16
后,我得到37333333258105220
。
parseFloat(3.7333333258105216E16)
给出相同的结果。
是什么原因?
答案 0 :(得分:3)
JavaScript将数字表示为浮点数。该存储格式由64位组成。一位用于符号,11位用于10的幂乘以数字,而52位用于该数字。
由于上述原因,数字可以与1/2^52
或1 / 4,503,599,627,370,496
相符。因此,数字精确到这个分数。有关浮点数的更多信息,请查看this wikipedia page。
我通过尝试向4,503,599,627,370,495
添加一个来测试它。它到达4,503,599,627,370,496
,但没有超过它。 Here's测试的小提琴。
答案 1 :(得分:2)
您正在遇到浮点临近。根据IEEE 754标准,JavaScript编号实现为双精度,64位浮点数。
答案 2 :(得分:1)
您无法始终准确地表示二进制中的浮点十进制数。它在数字末尾失去精度,因此它可以适合64位。