javascript - 为什么 javascript Number 函数返回该数字的错误值?

标签 javascript numbers

所以我在使用 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/

相关文章:

javascript - nodeValue 与 innerHTML 和 textContent。如何选择?

javascript - 如何根据 JavaScript 中的值对表行进行排序

javascript - 在不使用循环或 jQuery 的情况下获取数组或 JSON 中选择的选项值列表

clang - 糟糕的 rand() 实现

有返回语句和没有返回语句的 Javascript 递归

javascript - 在 Javascript 中使用高数值的奇怪行为

javascript - 内部 HTML 转 ascii

javascript - 为什么 for 循环迭代 100000 次比 50000 次更快?

c - 如何在不使用数组的情况下计算排序整数的模式

c - 倒数算法错误