所以我用javascript Number()函数遇到了这个问题,它似乎返回了错误的值:
以下代码:
号(" 10153396863200835&#34)
返回10153396863200836,而不是10153396863200835
但如果我做号码(" 10153396863200836")则返回10153396863200836 和数字(" 10153396863200834")返回10153396863200834
所以我很困惑发生了什么?感谢
答案 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不会突然停止拥有这些值,只是他们的数学开始变得有趣。