Kesalahan floating -point terjadi ketika operasi perkalian dari perkalian desimal di JS.
<script>
Peringatan (11*22.9)
</script>
Hasilnya adalah 251.8999999999998 bukannya 251.9
Pasti ada banyak sakit kepala orang. Jadi bagaimana cara menyelesaikannya? Di sini, solusinya diberikan.
1,
Salin kode kode sebagai berikut:
<script>
Peringatan (11*(22,9*10)/10);
</script>
Gagasan perkiraan untuk menyelesaikan masalah adalah bahwa faktor ini diperbesar menjadi bilangan bulat terlebih dahulu, dan akhirnya dibagi dengan kelipatan yang sesuai, sehingga hasil yang benar dapat diperoleh.
2,
Salin kode kode sebagai berikut:
<Script Disper>
Number.prototype.ratate = function () {
var os.tostring ();
if (ostr.indexof (".") ==-1)
Kembali 1;
kalau tidak
Return math.pow (10, parseint (osr.length-organ.indexof (".");
}
fungsi trans () {
args = trans.arguments;
var tes = 1;
untuk (i = 0; i <args.length; i ++)
temp*= args [i]*args [i] .rrate ();
untuk (i = 0; i <args.length; i ++)
temp/= args [i] .rrate ();
Kembalikan suhu
}
Peringatan (trans (11.22.9));
</script>
Solusi ini adalah metode yang lebih merepotkan, tetapi dapat membuat Anda mungkin memahami proses sebenarnya dari menyelesaikan masalah ini.
Anda juga dapat menggunakan metode empat rumah dan lima metode yang masuk. .
Salin kode kode sebagai berikut:
FUNGSI FORDIGHT (Dight, How) {
Dight = Math.round (Dight*Math.pow (10, How))/Math.pow (10, bagaimana);
Mengembalikan penganiayaan;
}
// Kecuali metode untuk mendapatkan metode yang tepat untuk menghapus metode ini
// Deskripsi: Hasil JavaScript akan memiliki kesalahan, dan akan jelas ketika dua angka floating -point dihapus. Fungsi ini mengembalikan hasil penghapusan yang lebih akurat.
// PANGGIL: ACCDIV (ARG1, ARG2)
// nilai pengembalian: arg1 kecuali hasil yang akurat dari arg2
Fungsi accdiv (arg1, arg2) {{
var t1 = 0, t2 = 0, r1, r2;
coba {t1 = arg1.toString ().
coba {t2 = arg2.toString ().
dengan (matematika) {
R1 = angka (arg1.toString (). Ganti (".", ""))
r2 = angka (arg2.tostring (). ganti (".", ""))
Return (r1/r2)*pow (10, t2-t1);
}
}
// Tambahkan metode div ke jenis angka, yang lebih nyaman untuk dihubungi.
Number.prototype.div = function (arg) {
Return accdiv (this, arg);
}
// fungsi multiplikasi untuk mendapatkan hasil perkalian yang akurat
// Deskripsi: Hasil dari hasil perkalian JavaScript akan memiliki kesalahan, dan akan jelas ketika dua angka poin mengambang dikalikan. Fungsi ini mengembalikan hasil perkalian yang lebih akurat.
// PANGGIL: ACCMUL (ARG1, ARG2)
// nilai pengembalian: arg1 dikalikan dengan hasil yang akurat Arg2
Fungsi accmul (arg1, arg2)
{{
varm m = 0, s1 = arg1.toString (), s2 = arg2.toString ();
Coba {m+= s1.split (".") [1] .length} catch (e) {}
Coba {m+= s2.split (".") [1] .length} catch (e) {}
Return Number (S1.Replace (".", "")*Number (s2.replace (".", "") /Math.pow (10, m)
}
// Tambahkan metode MUL ke jenis angka, yang lebih nyaman untuk dihubungi.
Number.prototype.mul = function (arg) {
Return accmul (arg, this);
}
// Tambahkan metode untuk mendapatkan hasil tambahan yang akurat
// Deskripsi: Hasil JavaScript akan memiliki kesalahan, dan akan lebih jelas ketika dua angka floating -point ditambahkan. Fungsi ini mengembalikan hasil penambahan yang lebih akurat.
// Call: Accidd (arg1, arg2)
// nilai pengembalian: arg1 plus hasil yang tepat dari arg2
Fungsi acadd (arg1, arg2) {{
var r1, r2, m;
coba {r1 = arg1.toString ().
coba {r2 = arg2.toString ().
M = Math.pow (10, Math.max (R1, R2)))
Return (arg1*m+arg2*m)/m
}
// Tambahkan metode Tambah ke Jenis Nomor, yang lebih nyaman untuk dihubungi.
Number.prototype.add = function (arg) {
Return acadd (arg, this);
}