为什么javascript Number函数为这个数字返回错误的值?

时间:2016-07-14 11:11:46

标签: javascript numbers

所以我用javascript Number()函数遇到了这个问题,它似乎返回了错误的值: 以下代码:  号(" 10153396863200835&#34)
   返回10153396863200836,而不是10153396863200835

但如果我做号码(" 10153396863200836")则返回10153396863200836 和数字(" 10153396863200834")返回10153396863200834

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

1 个答案:

答案 0 :(得分:4)

因为JavaScript的数字是IEEE-754双精度二进制浮点数(通常称为“双精度”)。它们只有十五位数的十进制精度。您的号码10153396863200835远远大于此值。

在双打中,我们停止能够代表下一个整数之前的最大整数是9,007,199,254,740,992 1 。 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中的最后一个整数,其中add 1为您提供下一个连续的整数。名称​​略微误导,因为9,007,199,254,740,994或者实际上10,153,396,863,200,836不会突然停止拥有这些值,只是他们的数学开始变得有趣。

相关问题