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

JavaScript中两个大数求和返回NaN问题求助

解决超大数值求和返回NaN的问题

问题根源

你的代码处理大数值返回NaN的核心原因是 JavaScript的Number类型精度限制:Number是双精度浮点数,最大安全整数为2^53 - 1(即9007199254740991),你定义的n1和n2远大于这个值,赋值时就已经丢失精度,调用toString()得到的不是原始数字的正确字符串,后续parseInt()处理自然会出现NaN。

修复后的代码

// 直接用字符串存储超大数值,避免Number精度丢失
let n1 = '1234567891234556555558';
let n2 = '1234567891234556555558';

// 处理逻辑
let a = n1;
let b = n2;
let carry = 0;  // 进位
let result = '';

// 从末尾开始逐位相加
for (let i = 1; i <= a.length; i++) {
    const digitA = parseInt(a[a.length - i]);
    const digitB = parseInt(b[b.length - i]);
    const sum = digitA + digitB + carry;
    
    // 当前位结果
    result = (sum % 10) + result;
    // 更新进位
    carry = Math.floor(sum / 10);
}

// 处理最高位相加后的剩余进位
if (carry > 0) {
    result = carry + result;
}

// 输出结果
console.log(result); // 输出:2469135782469113111116

关键改动说明

  • 用字符串直接存储超大数值,彻底避免Number类型的精度丢失问题;
  • 简化求和逻辑:用取模%10获取当前位结果,用Math.floor(sum/10)计算进位,比字符串截取处理更高效直观;
  • 补充了循环结束后进位的处理,避免最高位相加产生进位时遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 11:05:07