Dalam JavaScript, ketika Anda menggunakan desimal untuk melakukan penambahan, pengurangan, perkalian dan operasi pembagian, Anda akan menemukan bahwa hasil yang diperoleh kadang -kadang diikuti oleh desimal yang panjang, yang membuat operasi ini rumit dan mempengaruhi hasil perhitungan. Saya mencari alasan internet, yang kira -kira sebagai berikut: Dalam JavaScript, banyak tempat desimal akan selalu muncul ketika operasi data dengan desimal. Ini karena dalam JavaScript, angka titik mengambang dihitung dalam 2 digit.
Salinan kode adalah sebagai berikut:
/**
* Operasi penambahan untuk menghindari angka multi-digit dan kerugian akurasi perhitungan setelah menambahkan titik desimal ke data.
*
* @param num1 Tambahkan nomor 1 | num2 tambahkan angka 2
*/
fungsi numadd (num1, num2) {
var Basenum, Basenum1, Basenum2;
mencoba {
basenum1 = num1.tostring (). split (".") [1] .length;
} catch (e) {
Basenum1 = 0;
}
mencoba {
basenum2 = num2.tostring (). split (".") [1] .length;
} catch (e) {
Basenum2 = 0;
}
Basenum = Math.pow (10, Math.max (Basenum1, Basenum2));
return (num1 * basenum + num2 * basenum) / basenum;
};
/**
* Operasi penambahan untuk menghindari angka multi-digit dan kerugian akurasi perhitungan setelah mengurangi fase data.
*
* @param num1 dikurangi | num2 dikurangi
*/
fungsi numsub (num1, num2) {
var Basenum, Basenum1, Basenum2;
var precision; // akurasi
mencoba {
basenum1 = num1.tostring (). split (".") [1] .length;
} catch (e) {
Basenum1 = 0;
}
mencoba {
basenum2 = num2.tostring (). split (".") [1] .length;
} catch (e) {
Basenum2 = 0;
}
Basenum = Math.pow (10, Math.max (Basenum1, Basenum2));
precision = (Basenum1> = Basenum2)? Basenum1: Basenum2;
return ((num1 * basenum - num2 * basenum) / basenum) .tofixed (precision);
};
/**
* Operasi multiplikasi untuk menghindari angka multi-digit dan kerugian akurasi perhitungan setelah mengalikan data dengan titik desimal.
*
* @param num1 pengali | Pengganda Num2
*/
fungsi nummulti (num1, num2) {
var basenum = 0;
mencoba {
basenum += num1.tostring (). split (".") [1] .length;
} catch (e) {
}
mencoba {
basenum += num2.tostring (). split (".") [1] .length;
} catch (e) {
}
Nomor pengembalian (num1.tostring (). REPLACE (".", "")) * NUMBER (num2.tostring (). Ganti (".", "")) / Math.pow (10, Basenum);
};
/**
* Operasi Divisi Untuk menghindari angka multi-digit dan kerugian akurasi perhitungan setelah membagi titik desimal data.
*
* dividen @param num1 | dividen Num2
*/
fungsi numDiv (num1, num2) {
var basenum1 = 0, basenum2 = 0;
var Basenum3, Basenum4;
mencoba {
basenum1 = num1.tostring (). split (".") [1] .length;
} catch (e) {
Basenum1 = 0;
}
mencoba {
basenum2 = num2.tostring (). split (".") [1] .length;
} catch (e) {
Basenum2 = 0;
}
dengan (matematika) {
basenum3 = angka (num1.toString (). REPLACE (".", ""));
basenum4 = angka (num2.tostring (). REPLACE (".", ""));
return (Basenum3 / Basenum4) * POW (10, Basenum2 - Basenum1);
}
};