背景:大数相加,由于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);