2016-07-14 86 views
0

所以我就遇到了这个问题与JavaScript Number()函数,它似乎返回错误值: 以下代码: 号(“10153396863200835”)
回报10153396863200836,没有10153396863200835为什么javascript数字函数为这个数字返回错误的值?

,但如果我这样做数量(“10153396863200836”)它返回10153396863200836 和数字(“10153396863200834”)返回10153396863200834

所以我很困惑发生了什么事?谢谢

回答

4

因为JavaScript的数字是IEEE-754双精度二进制浮点数(通常称为“double”)。他们只有15位数的小数精度。你的号码,10153396863200835,比这大得多。

在双打中,我们不能代表下一个整数之前的最大整数是9,007,199,254,740,992 。 9,007,199,254,740,993不能用双打代表; 9,007,199,254,740,994即可。这是因为在这个尺度下,最不重要的位值2位十进制。你去进一步,更大的这些差距获得,作为最低显著位开始是值得的4个十进制,然后8,然后...


现代JavaScript有该值的方便常这个值之前的权利, 9,007,199,254,740,991:Number.MAX_SAFE_INTEGER。它被定义为double中的最后一个整数,加1给出下一个连续整数。这个名字是略微有误导性,因为9,007,199,254,740,994或者确实10,153,396,863,200,836不会突然停止拥有这些值,这只是与他们的数学开始变得......有趣。

+0

好的谢谢,这解释得很好。 – rainman333

相关问题