首先要說明的是,不能正確處理小數的運算並不是 JavaScript
語言本身的設計錯誤,其它高級編程語言,如C,Java等,也是不能正確處理小數運算的。
//我們用計算器計算 21*0.9 = 18.9;
//在控制檯計算 21*0.9 = 18.900000000000002;
/*我們都知道,用高級編程語言編寫的程序需要經過解釋、編譯等操作轉變成 CPU(Central Processing Unit)
可以識別的機器語言才能運行,而對 CPU 來說,它不識別數的十進制、八進制和十六進制等,我們在程序中聲明
的這些進制數都會被轉成二進制數進行運算。
*/
console.log(21*0.9); //18.900000000000002
//例如保留三位小數向上取整
var item = Math.ceil(21*0.9*1000)/1000;
console.log(item); // 18.901
//解決方法:
var item1 = Math.ceil((21*10)*(0.9*10)/100*1000)/1000;
console.log(item1); // 18.9
說明:
計算內部使用二進制來計算,如果不想出現 21*0.9 = 18.900000000000002 這樣的情況,我們需要在前端進行轉換。
所以,解決方法就是進行轉換 例如:(21*10)*(0.9*10)/100 = 18.9
這是我在控制檯打印出來的: