所以我在使用 javascript Number() 函数时遇到了这个问题,它似乎返回了错误的值:
下面的代码:
号码(“10153396863200835”)
返回 10153396863200836,而不是 10153396863200835
但是如果我执行 Number("10153396863200836") 它会返回 10153396863200836 和 Number("10153396863200834") 返回 10153396863200834
所以我很困惑发生了什么事?谢谢
最佳答案
因为 JavaScript 的数字是 IEEE-754 double 二进制 float (通常称为“double”)。它们只有大约 15 位小数精度。您的号码 10153396863200835
比这个大得多。
在 double 中,我们无法表示下一个整数之前的最大整数是 9,007,199,254,740,9921。 9,007,199,254,740,993 不能用 double 表示; 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 不会突然停止拥有这些值,只是它们的数学开始变得......有趣。
关于javascript - 为什么 javascript Number 函数返回该数字的错误值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38372658/