Untuk jumlah yang sangat besar atau sangat kecil, notasi ilmiah dapat digunakan untuk mewakili nilai titik mengambang. Menggunakan notasi ilmiah, angka dapat direpresentasikan sebagai angka plus E/E, diikuti oleh kelipatan 10, seperti:
Salinan kode adalah sebagai berikut:
var num1 = 3.125e7; // 31250000 var num2 = 3e-17; // 0,00000000000000000000000000000000000000003
Untuk menambah atau mengurangi angka yang sangat besar, Anda dapat menggunakan metode notasi ilmiah + untuk melakukan metode ini, seperti:
Salinan kode adalah sebagai berikut:
// Hanya pertimbangkan bilangan bulat besar, dan jangan pertimbangkan fungsi desimal stradd (snum1, snum2) {
/*Tambahkan satu digit untuk merekam kasus di mana digit tertinggi lebih lanjut*/
var snum1 = ['0', snum1] .join (''), snum2 = ['0', snum2] .join ('');
/*Tambahkan 0 ke string numerik pendek*/
var len1 = snum1.length, len2 = snum2.length,
zeroarr = function (len) {
var arr = array baru (len), i = len;
while (i-) {arr [i] = 0;}
return arr;
};
if (len1> len2) {
var arrtemp = zeroArr (len1 - len2);
arrtemp.push (snum2),
snum2 = arrtemp.join ('');
}
lain jika (len2> len1) {
var arrtemp = zeroArr (len2 - len1);
arrtemp.push (snum1),
snum1 = arrtemp.join ('');
}
/*Konversi string ke array dan tambahkan dengan digit yang sesuai*/
var arr1 = snum1.split (''), arr2 = snum2.split ('');
var arraddres = array baru (arr1.length), i = arr1.length;
var andone = 0, // apakah penambahan bagian bawah adalah cur1, cur2, curadd;
while (i-) {
cur1 = +arr1 [i], cur2 = +arr2 [i];
curadd = cur1+cur2+andone;
if (10> curadd)
arraddres [i] = curadd,
andone = 0;
kalau tidak
arraddres [i] = +curadd.toString (). Slice (1,2),
andone = 1;
}
if (! andone) {// Akhirnya, apakah akan melangkah lebih jauh, jika tidak mencegat 0 arraddres.splice (0,1);
}
/*Jika ada 19 digit pertama dalam array, gunakan notasi ilmiah untuk mewakili hasil*/
Var Keeplen = 19; // Desimal JS hanya mempertahankan 18 digit setelah titik desimal var eafter = arraddres.length - 1; // bagian berganda setelah e var ebefore, ebeforestr = ''; // Bagian desimal sebelum e
if (Keeplen <arraddres.length)
ebeforestr = [arraddres [0], '.', Arraddres.slice (1, Keeplen) .join ('')]. gabung ('');
kalau tidak
ebeforestr = [arraddres [0], '.', arraddres.slice (1) .join ('')]. gabung ('');
ebeFore = +ebeforeStr;
return [number (arraddres.join ('')), ebefore, eafter];
}
Stradd ('1234567890', '9876543210'); // -> [1111111100, 1.11111111, 9]
Kode seperti di atas, bukankah itu sangat sederhana?