js中的大数相加
当有两个整数 a 和 b ,在通常情况下我们有“+”运算符对其进行相加运算:
1let sum = a + b;
但是 JS 在存放整数的时候是有一个安全范围的,一旦数字超过这个范围便会损失精度。
我们不能拿精度损失的数字进行运行,因为运算结果一样是会损失精度的。
所以,我们要用字符串来表示数据!(不会丢失精度)
JS 中整数的最大安全范围可以查到是:9007199254740991
假如我们要进行 9007199254740991 + 1234567899999999999
我们要先准备两个字符串变量和一个方法:
1let a = "9007199254740991";2let b = "1234567899999999999";34function add(a ,b){5 //...6}
然后从个位开始相加:
1let a = "9007199254740991";2let b = "1234567899999999999";34function add(a ,b){5 //取两个数字的最大长度6 let maxLength = Math.max(a.length, b.length);7 //用0去补齐长度8 a = a.padStart(maxLength , 0);//"0009007199254740991"9 b = b.padStart(maxLength , 0);//"1234567899999999999"10 //定义加法过程中需要用到的变量11 let t = 0;12 let f = 0; //"进位"13 let sum = "";14 for(let i=maxLength-1 ; i>=0 ; i--){15 t = parseInt(a[i]) + parseInt(b[i]) + f;16 f = Math.floor(t/10);17 sum = t%10 + sum;18 }19 if(f == 1){20 sum = "1" + sum;21 }22 return sum;23}
1add(a ,b); //结果为:1243575099254740990