JavaScript 处理大数相加问题
-
问题:
- JavaScript的Number类型遵循IEEE 754规范表示,意味着JavaScript能精确表示的数字有限,可以精确到个位的最大整数是9007199254740992,即2的53次方,超过这个范围数据的精度就会丢失,造成JavaScript无法其判断准确大小。
-
解决方案:
- 数字很大的时候用 number 类型无法表示,就用字符串形式表示,转成字符串形式之后分割,依次最后一位进行相加,相加之后确认是否需要进位,类型转为字符串,下次相加把进上来的数字相加进去。
-
~~代表双非按位取反运算符,对于正数,它向下取整;对于负数,向上取整;非数字取值为0
function sumBigNumber(a, b) {
var res = '';
var temp = 0;
// 分割成字符串
a = a.split('');
b = b.split('');
while (a.length || b.length || temp) {
//双非按位取反
temp += ~~a.pop() + ~~b.pop();
res = (temp % 10) + res;
temp = temp > 9;
}
return res.replace(/^0+/, '');
}
var sum1 = '123123123123123';
var sum2 = '567567567567567';
console.log(sumBigNumber(sum1, sum2));
console.log(Infinity);