如果两个整数相加后大于 JS 的安全值时,JS 会以指数形式存储并导致误差,请给出一个解决方案,解决这个问题
方法一:转换为字符串处理
function bigNumSum (num1, num2) {
let str1 = num1 + ''
let str2 = num2 + ''
let str1Len = str1.length
let str2Len = str2.length
let maxLen = str1Len > str2Len ? str1Len : str2Len
let flag = 0
let res = ''
for (let i = 1; i <= maxLen; i++) {
let temp = ~~str1[str1Len - i] + ~~str2[str2Len - i] + flag
res = temp % 10 + res
flag = temp > 9
}
return flag ? 1 + res : res
}
方法二:转换为数组处理
function bigNumSum (num1, num2) {
let arr1 = [...(num1 + '')]
let arr2 = [...(num2 + '')]
let flag = 0
let res = ''
while (arr1.length || arr2.length) {
let temp = ~~arr1.pop() + ~~arr2.pop() + flag
res = temp % 10 + res
flag = temp > 9
}
return flag ? 1 + res : res
}
jsperf.com 上的性能对比图如下:
可以看出,方法一略优于方法二