JavaScript 大整数操作相关方法

原理

js 整数最大不能超过 2^53 - 1,参考

所以,为了避免丢失精度,我们需要用字符串来表示数据。

相加

String.prototype.padStart() 使用另一个字符串填充当前字符串

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
let a = "9007199254740991";
let b = "1234567899999999999";

function add(a, b) {
  // 取两个数字的最大长度
  const 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 = ~~a[i] + ~~b[i] + f; // ~~ 相当于 parseInt()
    f = Math.floor(t / 10); // 向下取整
    sum = t % 10 + sum;
  }
  if (f === 1) {
    sum = "1" + sum;
  }

  return sum;
}

const bigNumberSum = add(a, b); // 1243575099254740990