rai*_*333 0 javascript numbers
所以我用javascript Number()函数遇到了这个问题,它似乎返回了错误的值:以下代码:Number(“10153396863200835”)返回
10153396863200836,而不是10153396863200835
但如果我执行 Number("10153396863200836") 它返回 10153396863200836 并且 Number("10153396863200834") 返回 10153396863200834
所以我很困惑发生了什么事?谢谢
因为 JavaScript 的数字是 IEEE-754 双精度二进制浮点数(通常称为“double”)。它们只有大约 15 位小数精度。你的数字,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。它被定义为双精度数中的最后一个整数,其中加 1 给出下一个连续的整数。这个名字有点误导,因为 9,007,199,254,740,994 或实际上 10,153,396,863,200,836 不会突然停止拥有这些值,只是它们的数学开始变得……有趣。
| 归档时间: |
|
| 查看次数: |
1133 次 |
| 最近记录: |