Apakah yang berlaku apabila operasi JavaScript kehilangan ketepatan?

PHPz
Lepaskan: 2023-04-21 09:23:48
asal
1602 orang telah melayarinya

Dalam pengaturcaraan harian, kami sering menggunakan pelbagai bahasa pengaturcaraan​​untuk mengendalikan pelbagai operasi berangka, antaranya JavaScript sudah pasti yang paling banyak digunakan. Walau bagaimanapun, apabila berurusan dengan pengiraan berangka yang kompleks dalam beberapa kes yang melampau, kita mungkin menghadapi situasi di mana keputusan operasi kehilangan ketepatan. Jadi mengapa ini berlaku? Bagaimana untuk mengelakkan kehilangan ketepatan pengiraan?

  1. Sebab kehilangan ketepatan operasi
    Dalam JavaScript, salah satu sebab utama kehilangan ketepatan operasi ialah ketidaktepatan nombor titik terapung. Terdapat hanya satu jenis nombor dalam JavaScript, jenis Nombor, yang menggunakan perwakilan nombor titik terapung 64-bit Nilai maksimum yang boleh diwakili ialah 1.7976931348623157e+308, dan nilai minimum ialah 5e-324 perpuluhan, nombor titik terapung Perwakilan binari selalunya tidak dapat diwakili dengan tepat, mengakibatkan kehilangan ketepatan. Lihat contoh berikut:
console.log(0.1 + 0.2); // 0.30000000000000004
Salin selepas log masuk

Oleh kerana perduaan tidak boleh mewakili 0.1 dan 0.2 dengan tepat, hasil penambahannya adalah tidak tepat dalam JavaScript, dengan digit tambahan selepas titik perpuluhan muncul.

  1. Cara mengelakkan kehilangan ketepatan pengiraan
    Terdapat banyak cara untuk mengelakkan kehilangan ketepatan pengiraan Berikut adalah beberapa kaedah biasa.

2.1 Gunakan integer untuk pengiraan
Apabila melakukan operasi yang kompleks, kita boleh menukar perpuluhan kepada integer untuk pengiraan, dan akhirnya menukar keputusan kepada perpuluhan. Sebagai contoh, kod berikut boleh mendarab 0.1 dan 0.2 dengan 10, menambah keputusan dan akhirnya membahagikan hasilnya dengan 10:

console.log((0.1 * 10 + 0.2 * 10) / 10); // 0.3
Salin selepas log masuk

2.2 Gunakan fungsi toFixed()
dalam JavaScript The Number type menyediakan kaedah toFixed(), yang boleh menukar nombor kepada perpuluhan dengan ketepatan tertentu (bilangan tempat perpuluhan yang diletakkan dalam kurungan dikekalkan). Sebagai contoh, dalam kod berikut, fungsi toFixed() akan mengekalkan dua tempat perpuluhan dan akhirnya memperoleh nombor titik terapung dengan ketepatan 0.30.

console.log((0.1 + 0.2).toFixed(2)); // 0.30
Salin selepas log masuk

2.3 Ketepatan Dikembangkan
Ketepatan operasi dalam JavaScript boleh dikembangkan untuk mengelakkan kehilangan ketepatan. Pendekatan biasa ialah menukar perpuluhan kepada integer dan kemudian melakukan pengiraan. Pilihan lain ialah menggunakan perpustakaan BigNumber dalam JavaScript Pustaka ini menyediakan jenis berangka berketepatan tinggi, yang boleh meningkatkan ketepatan operasi. Contohnya, kod berikut boleh menggunakan perpustakaan BigNumber untuk menyelesaikan masalah kehilangan ketepatan operasi:

var BigNumber = require('bignumber.js');
var x = new BigNumber("0.1");
var y = new BigNumber("0.2");
console.log(x.plus(y).toString()); // "0.3"
Salin selepas log masuk

Artikel ini meringkaskan sebab kehilangan ketepatan operasi dalam JavaScript dan kaedah pengelakan biasa. Apabila berurusan dengan pengiraan berangka yang kompleks, kita perlu menganalisis masalah tertentu dengan teliti, menggunakan kaedah yang sesuai untuk mengelakkan kehilangan ketepatan, dan memastikan ketepatan program.

Atas ialah kandungan terperinci Apakah yang berlaku apabila operasi JavaScript kehilangan ketepatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan