【问题标题】:parseInt(8558968890839370929) return 8558968890839371000 ,why? [duplicate]parseInt(8558968890839370929) 返回 8558968890839371000 ,为什么? [复制]
【发布时间】:2014-06-06 07:59:29
【问题描述】:

当我执行时

parseInt(8558968890839370929)

在 Chrome 中,它返回 8558968890839371000。为什么它不返回9,007,199,254,740,992 (253) 而是返回?

【问题讨论】:

    标签: javascript


    【解决方案1】:

    因为跨越了 int 的范围。 int 的最大值可以是+/- 9007199254740992

    来自ECMA

    注意所有大小为 no 的正整数和负整数 大于 253 可以用 Number 类型表示(实际上, 整数 0 有两种表示形式,+0 和 -0)。

    【讨论】:

    • 是的,在 javascript 中,数字的类型在 2^53 时是交叉的,所以我认为它必须返回我 Math.pow(2,53),但这不是结果
    • @user3559031 我怀疑它最终溢出并回绕到8558968890839371000
    • 我不这么认为。你可以在 chrome 中尝试 parseInt(8558968890839371001) 原来是 8558968890839371000,而 parseInt(8558968890839371002) 原来是 85589680it 890839371000与 parseInt(8558968890839371001) 和 parseInt(8558968890839371002) 的结果不应该相同。似乎这个数字超过了最大值。
    • @user3559031 - “它是如何运行的”是什么意思?如果您想查看执行您所看到的 JS 代码,您可以查看 webkit 或 Firefox 代码(它们是开源的)。您超出了整数的最大范围,因此您失去了精度。不多说了。我链接到上面的一个 dup 问题并投票决定以 dup 的身份结束。
    • @user3559031 - 因为它失去了精度。精度限制意味着无法跟踪那么多数字,因此最后一个数字不再准确。如果需要精度,请不要超过 javascript 支持的最大整数。
    猜你喜欢
    • 2012-02-04
    • 2011-09-18
    • 2018-10-01
    • 2023-01-26
    • 1970-01-01
    • 2016-10-16
    • 2012-07-05
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多