parseInt(8558968890839370929) 返回 8558968890839371000 ,为啥? [复制]
Posted
技术标签:
【中文标题】parseInt(8558968890839370929) 返回 8558968890839371000 ,为啥? [复制]【英文标题】: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) 而是返回?
【问题讨论】:
【参考方案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 支持的最大整数。以上是关于parseInt(8558968890839370929) 返回 8558968890839371000 ,为啥? [复制]的主要内容,如果未能解决你的问题,请参考以下文章