Cuando hay dos números enteros a y b, en el caso habitual tenemos el operador "+" para sumarlos:
let sum = a + b;
Pero JS tiene un rango seguro al almacenar números enteros ; una vez que el número excede este rango, perderá precisión.
No podemos ejecutar números con pérdida de precisión, porque el resultado de la operación también pierde precisión.
Por lo tanto, ¡tenemos que usar cadenas para representar datos! (sin pérdida de precisión)
El rango máximo seguro de números enteros en JS se puede encontrar: 9007199254740991
Si queremos realizar 9007199254740991 + 1234567899999999999
Primero debemos preparar dos variables de cadena y un método:
let a = "9007199254740991";
let b = "1234567899999999999";
function add(a ,b){
//...
}
Luego alinee las longitudes de las cuerdas:
let a = "9007199254740991";
let b = "1234567899999999999";
function add(a ,b){
//取两个数字的最大长度
let maxLength = Math.max(a.length, b.length);
//用0去补齐长度
a = a.padStart(maxLength , 0);//"0009007199254740991"
b = b.padStart(maxLength , 0);//"1234567899999999999"
}
Luego agregue desde el lugar de las unidades:
let a = "9007199254740991";
let b = "1234567899999999999";
function add(a ,b){
//取两个数字的最大长度
let maxLength = Math.max(a.length, b.length);
//用0去补齐长度
a = a.padStart(maxLength , 0);//"0009007199254740991"
b = b.padStart(maxLength , 0);//"1234567899999999999"
//定义加法过程中需要用到的变量
let t = 0;
let f = 0; //"进位"
let sum = "";
for(let i=maxLength-1 ; i>=0 ; i--){
t = parseInt(a[i]) + parseInt(b[i]) + f;
f = Math.floor(t/10);
sum = t%10 + sum;
}
if(f == 1){
sum = "1" + sum;
}
return sum;
}
correr:
add(a ,b); //结果为:1243575099254740990