Rumah >hujung hadapan web >tutorial js >Bagaimana untuk menyelesaikan masalah berbilang tempat perpuluhan dalam operasi perpuluhan js

Bagaimana untuk menyelesaikan masalah berbilang tempat perpuluhan dalam operasi perpuluhan js

PHPz
PHPzasal
2016-05-16 15:37:212921semak imbas

Mengenai masalah tempat perpuluhan berbilang apabila menambah, menolak, mendarab dan membahagi perpuluhan dalam JavaScript, saya mempelajarinya sendiri dan menjalankan ujian yang berkaitan Saya mendapat banyak mata pengetahuan. Rakan yang memerlukan boleh merujuknya.

Biar saya kongsikan dengan anda satu ujian yang menarik:

0.1 0.2 == 0.3 //salah
Saya tiba-tiba tertekan, okay! Ternyata 0.1 0.2 menjadi: 0.3000000000000000004
lagi 2.4/0.8 => 2.9999999999999996 tidak ada cara untuk mengubahnya, dan mengubahnya menjadi integer (2.4 * 100)/(0.8 * 100) perlu tolak 0.11 untuk mendapatkan keputusan Terdapat banyak perpuluhan dalam nilai, 10.110000000000001, dan kemudian saya menggunakan kaedah toFixed untuk menapis perpuluhan, tetapi saya tidak tahu yang mana satu lebih cekap daripada kaedah sebelumnya untuk menukarnya menjadi integer dan kemudian melaksanakannya. Mari cuba lagi!

var date1 = new Date();
for(var i = 0; i < 10000; i++){
 var result1 = (10.22 - 0.11).toFixed(2);    
}
alert(new Date() - date1);//效率低
  
var date2 = new Date();
for(var j = 0; j < 10000; j++){
 var result2 = (10.22 * 1000 - 0.11 * 1000) / 1000;    
}
alert(new Date() - date2);//效率高
 
alert(0.1 + 0.2 == 0.3); //既然返回false
alert(0.1 + 0.2); //既然返回0.30000000000000004
alert(parseFloat(0.1) + parseFloat(0.2)); //还是返回0.30000000000000004
Saya telah menyemak beberapa maklumat, satu ialah pepijat dalam pengiraan titik terapung JavaScript, dan satu lagi berkaitan dengan penukaran akhir komputer kepada pengiraan binari, tetapi kenapa tidak semua perpuluhan Fenomena ini akan selalu berlaku Saya tidak tahu lagi saya akan mengkajinya secara mendalam apabila saya mempunyai masa.

Penyelesaian:
Terdapat dua cara untuk menyelesaikan masalah ini Yang pertama ialah menggunakan kaedah toFixed(n) JavaScript untuk mendapatkan N tempat perpuluhan secara langsung. , walau bagaimanapun, saya secara peribadi merasakan bahawa kaedah ini akan mempunyai beberapa masalah dalam ketepatan data. Ia boleh digunakan jika keperluan ketepatan data tidak tinggi.

alert((0.1 + 0.2).toFixed(1));
Kaedah kedua ialah tulis sendiri kaedah pengiraan. Berikut ialah fungsi penambahan tersuai Menggunakan kaedah ini untuk penambahan akan mengelakkan masalah di atas.


//自定义加法运算
function addNum (num1, num2) {
 var sq1,sq2,m;
 try {
  sq1 = num1.toString().split(".")[1].length;
 }
 catch (e) {
  sq1 = 0;
 }
 try {
  sq2 = num2.toString().split(".")[1].length;
 }
 catch (e) {
  sq2 = 0;
 }
 m = Math.pow(10,Math.max(sq1, sq2));
 return (num1 * m + num2 * m) / m;
}
alert(addNum(0.1, 0.2));
Sudah tentu, ia juga boleh ditulis secara ringkas sebagai: alert((num * 3 10 * 3) /3 Dengan cara ini, N berbilang perpuluhan tempat tidak akan muncul.

alert((nombor * 3 10 * 3) /3); dan alert(nombor 10); sebab masalah di atas, atau Kita perlu mengkajinya secara mendalam dan anda boleh membincangkannya dengan lebih lanjut.

Di atas ialah keseluruhan kandungan bab ini Untuk lebih banyak tutorial berkaitan, sila lawati

Tutorial Video JavaScript!

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