JS無法進行數值精確計算的問題
在做js浮點型數值計算的時候,出現的了資料計算不準確的原因:
在有限的儲存空間下,絕大部分的十進位制小數都不能用二進位制浮點數來精確表示。例如,0.1
這個簡單的十進位制小數就不能用二進位制浮點數來表示。
console.log( 1 - 0.8 ); //輸出 0.19999999999999996
console.log( 6 * 0.7 ); //輸出 4.199999999999999console.log( 0.1 + 0.2 ); //輸出 0.30000000000000004
console.log( 0.1 + 0.7 ); //輸出 0.7999999999999999
console.log( 1.2 / 0.2 ); //輸出 5.999999999999999
通過上面舉出的例子可以看到,原生的js運算結果不一定準確,會丟失精度。
解決方案 :將浮點數乘以(擴大)10的n次方倍,把浮點數變為整數後再進行相應的運算,最後將得到的結果除以(縮小)10的n次方倍。
console.log( (1*10 - 0.8*10)/10 ); //輸出 0.2
console.log( 6 * 0.7*10/10 ); //輸出 4.2console.log( (0.1*10 + 0.2*10)/10 ); //輸出 0.3
console.log( (0.1 *10+ 0.7*10)/10 ); //輸出 0.8
console.log( 1.2 *10/(0.2 *10) ); //輸出 6