You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript合并整数数组后用parseInt转换出现数值偏差的原因?

为什么parseInt转换长数字字符串会得到错误结果?

你的问题出在JavaScript的Number类型精度限制上:

  • JavaScript里的常规数字(Number)是64位双精度浮点数,它只能精确表示范围在 -2^53 到 2^53(也就是 -9007199254740992 到 9007199254740992)之间的整数。
  • 你的数组拼接后得到的字符串是 6145390195186705543,这个数的大小已经超过了2^53,超出部分的二进制位无法被精确存储,所以当parseInt把它转换成Number类型时,会自动进行舍入,导致末尾的数字被修改,最终得到6145390195186705000。

验证一下:

const str = nums.join('');
console.log(str); // 输出 6145390195186705543
console.log(Number.MAX_SAFE_INTEGER); // 输出 9007199254740992,也就是2^53
console.log(str > Number.MAX_SAFE_INTEGER); // 输出 true,说明确实超出了安全范围

如果需要精确处理这种超大整数,应该用JavaScript的BigInt类型:

let nums = [6,1,4,5,3,9,0,1,9,5,1,8,6,7,0,5,5,4,3]
console.log(BigInt(nums.join(''))); // 输出 6145390195186705543n

BigInt可以表示任意精度的整数,不会出现精度丢失的问题。

内容的提问来源于stack exchange,提问作者Santosh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 23:50:38