介绍
因number类型的长度有限制而出现的精度问题
# 🎏 大数运算
0.1+0.2的精度问题, 可以先进位 也就是乘以10后再相加
超过js的数字长度, 可以通过字符上下拆分相加的方式来计算, 注意算数进位
let a = "9876543210123456789000000000129";
let b = "1234567898765432100000012345678902";
function add(str1, str2) {
// 获取两个数字的最大长度
let maxLength = Math.max(str1.length, str2.length);
// 用0补齐长度,让它们两个长度相同
str1 = str1.padStart(maxLength, 0);
//"0009876543210123456789000000000123"
str2 = str2.padStart(maxLength, 0);
// "1234567898765432100000012345678901"
let temp = 0; // 每个位置相加之和
let flag = 0; // 进位:相加之和如果大于等于 10,则需要进位 等下轮时加上
let result = "";
for (let i = maxLength - 1; i >= 0; i--) {
// 获取当前位置的相加之和:字符串 1 + 字符串 2 + 进位数字 第一轮为0, 后续需要进位都会+1
temp = parseInt(str1[i]) + parseInt(str2[i]) + flag;
console.info(temp)
// 获取下一个进位
flag = Math.floor(temp / 10);
// 拼接结果字符串
result = temp % 10 + result;
}
if (flag === 1) {
// 如果遍历完成后,flag 还剩 1,说明两数相加之后多了一位,类似于:95 + 10 = 105
result = "1" + result;
}
return result;
}
