大数相加

参考:知乎-JS 实现两个大数相加?-pany回答

背景:大数相加,由于js精度 最大只能到 9007199254740991 (16位) 一旦数字超过这个范围便会损失精度

为了能让超精度的数字相加,所以要用字符串表示数据

let a = "9007199254740991";
let b = "1234567899999999999";

function add(a, b) {
  //取两个数字的最大长度
  let maxLength = Math.max(a.length, b.length);
  //用0去补齐长度
  a = a.padStart(maxLength, 0); //"0009007199254740991"
  b = b.padStart(maxLength, 0); //"1234567899999999999"
  //定义加法过程中需要用到的变量
  let t = 0;
  let f = 0; // 进位
  let sum = "";
  // 从个位开始相加
  for (let i = maxLength - 1; i >= 0; i--) {
    t = parseInt(a[i]) + parseInt(b[i]) + f;
    f = Math.floor(t / 10);
    sum = (t % 10) + sum; // 字符串拼接
  }
  // 最高位进位为1, 补1
  if (f == 1) {
    sum = "1" + sum;
  }
  return sum;
}

add(a, b);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值