前言
JS中整数有存储范围,一旦超出这个范围则会丢失精度
,通过MAX_SAFE_INTEGER
可以看到JS中支持的最大的、安全的正整数为9007199254740991。
JS新类型BigInt
可以处理大整数运算,但这次不逃课,本文将尝试自行处理大整数相加,实际开发中还是更推荐直接使用BigInt
。
实现
接收两个可能为大整数的参数,求和。
为了确保不丢失精度,这里将参数和返回都设为字符串
。思路同小学数学,相加进位。
function sum(a, b) {
const len = Math.max(a.length, b.length)
let result = ""
a = a.padStart(len, "0") // 不足最高位补0
b = b.padStart(len, "0") // 不足最高位补0
let carry = 0 // 进位
for (let i = len - 1; i >= 0; i--) {
const n = +a[i] + +b[i] + carry
carry = Math.floor(n / 10)
result = (n % 10) + result
}
if (carry) result = "1" + result
return result
}