Rumah >hujung hadapan web >Soal Jawab bahagian hadapan >Apakah yang berlaku apabila operasi JavaScript kehilangan ketepatan?

Apakah yang berlaku apabila operasi JavaScript kehilangan ketepatan?

PHPz
PHPzasal
2023-04-21 09:13:071629semak imbas

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

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

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

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"

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!

Kenyataan:
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