Für sehr große oder sehr kleine Zahlen können Gleitkommawerte in wissenschaftlicher Notation dargestellt werden. In wissenschaftlicher Schreibweise kann eine Zahl als Zahl plus e/E gefolgt von einem Vielfachen von 10 ausgedrückt werden, wie zum Beispiel:
var num1 = 3.125e7; // 31250000 var num2 = 3e-17; // 0.0000000000000003
Um die Addition und Subtraktion besonders großer Zahlen durchzuführen, können Sie die wissenschaftliche String-Notation verwenden, wie zum Beispiel:
// Hier werden nur große Ganzzahlen berücksichtigt, Dezimalzahlen werden nicht berücksichtigt function strAdd(sNum1, sNum2){
/*Eine Ziffer hinzufügen, um die Situation aufzuzeichnen, in der die höchste Ziffer um eins erhöht wird*/
var sNum1 = ['0', sNum1].join(''), sNum2 = ['0', sNum2].join('');
/*Füge 0 zu kurzen numerischen Zeichenfolgen hinzu*/
var len1 = sNum1.length, len2 = sNum2.length,
ZeroArr = function(len){
var arr = new Array(len), i=len;
While(i--){arr[i] = 0;}
Zurück arr;
};
if(len1 > len2){
var arrTemp = zeroArr(len1 - len2);
arrTemp.push(sNum2),
sNum2 = arrTemp.join('');
}
sonst if(len2 > len1){
var arrTemp = zeroArr(len2 - len1);
arrTemp.push(sNum1),
sNum1 = arrTemp.join('');
}
/*Konvertieren Sie die Zeichenfolge in ein Array und fügen Sie die entsprechenden Ziffern hinzu*/
var arr1 = sNum1.split(''), arr2 = sNum2.split('');
var arrAddRes = new Array(arr1.length), i=arr1.length;
var andone = 0, // Ob eins zum Low-Bit hinzugefügt werden soll cur1, cur2, curAdd;
while(i--){
Cur1 = arr1[i], cur2 = arr2[i];
CurAdd = cur1 cur2 andone;
If(10 > curAdd)
arrAddRes[i] = curAdd,
andone = 0;
sonst
arrAddRes[i] = curAdd.toString().slice(1,2),
andone = 1;
}
If(!andone){ // Ob eins am Ende hinzugefügt werden soll, andernfalls das vorherige abfangen 0 arrAddRes.splice(0,1);
}
/*Wenn die ersten 19 Ziffern des Arrays abgefangen werden, verwenden Sie die wissenschaftliche Notation, um das Ergebnis auszudrücken*/
var keeplen = 19; // JS-Dezimalstellen behalten nur 18 Ziffern nach dem Komma var eAfter = arrAddRes.length - 1; // Der Mehrfachteil nach e var eBeforeStr = ''; >
if(keeplen < arrAddRes.length)
eBeforeStr = [arrAddRes[0], '.', arrAddRes.slice(1, keeplen).join('')].join('');
sonst
eBeforeStr = [arrAddRes[0], '.', arrAddRes.slice(1).join('')].join('');
eBefore = eBeforeStr;
Return [Number(arrAddRes.join('')), eBefore, eAfter];
}
strAdd('1234567890', '9876543210'); // ->
Der Code ist wie oben, ist er sehr einfach?