Rumah >hujung hadapan web >tutorial js >Bagaimana untuk menyelesaikan masalah berbilang tempat perpuluhan dalam operasi perpuluhan js
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
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));
//自定义加法运算 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));
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.
Tutorial Video JavaScript!