Pour les nombres très grands ou très petits, les valeurs à virgule flottante peuvent être représentées en notation scientifique. En notation scientifique, vous pouvez exprimer un nombre sous la forme d'un nombre plus e/E, suivi d'un multiple de 10, tel que :
Pour effectuer l'addition et la soustraction de nombres particulièrement grands, vous pouvez utiliser la notation scientifique sous forme de chaîne, telle que :
// Seuls les grands entiers sont pris en compte ici, les décimales ne sont pas prises en compte function strAdd(sNum1, sNum2){
/*Ajoutez un chiffre pour enregistrer la situation où le chiffre le plus élevé est avancé d'un*/
var sNum1 = ['0', sNum1].join(''), sNum2 = ['0', sNum2].join('');
/*Ajouter 0 aux chaînes numériques courtes*/
var len1 = sNum1.length, len2 = sNum2.length,
ZeroArr = function(len){
var arr = nouveau tableau(len), i=len
Tandis que(i--){arr[i] = 0;}
Retourner
};
si(len1 > len2){
var arrTemp = zeroArr(len1 - len2);
arrTemp.push(sNum2),
sNum2 = arrTemp.join('');
}
sinon if(len2 > len1){
var arrTemp = zeroArr(len2 - len1);
arrTemp.push(sNum1),
sNum1 = arrTemp.join('');
}
/*Convertissez la chaîne en tableau et ajoutez les chiffres correspondants*/
var arr1 = sNum1.split(''), arr2 = sNum2.split('');
var arrAddRes = new Array(arr1.length), i=arr1.length
var andone = 0, // S'il faut en ajouter un au bit faible cur1, cur2, curAdd
pendant que(i--){
Cur1 = arr1[i], cur2 = arr2[i];
CurAdd = cur1 cur2 et un
Si (10 > curAdd)
arrAddRes[i] = curAdd,
etun = 0;
d'autre
arrAddRes[i] = curAdd.toString().slice(1,2),
etun = 1;
}
If(!andone){ // Faut-il en ajouter un à la fin, sinon intercepter le précédent 0 arrAddRes.splice(0,1);
}
/*Si les 19 premiers chiffres du tableau sont interceptés, utilisez la notation scientifique pour exprimer le résultat*/
var keeplen = 19; // Les décimales JS ne conservent que 18 chiffres après la virgule var eAfter = arrAddRes.length - 1; // La partie multiple après e var eBefore, eBeforeStr = ''; >
if(keeplen
eBeforeStr = [arrAddRes[0], '.', arrAddRes.slice(1, keeplen).join('')].join('');
d'autre
eBeforeStr = [arrAddRes[0], '.', arrAddRes.slice(1).join('')].join('');
eAvant = eAvantStr;
Renvoie [Number(arrAddRes.join('')), eBefore, eAfter]
}
strAdd('1234567890', '9876543210'); // ->
Le code est comme ci-dessus, est-ce très simple ?