1、問題描述:
兩個有限的數字相減得到小數點後面類似00000000000001,69999999999999之類的數。像下面這樣0.1 + 0.2沒有返回0.3,反而返回0.30000000000000004。原因是因爲計算機把數字轉成二進制計算再將計算轉成十進制的這個過程出現的計算誤差。不僅僅是JavaScript會出現這個問題,其他語言也會有。不過解決思路都是一樣的
0.1 + 0.2
=> 0.30000000000000004
2、問題解決
下面是用JavaScript方法解決,其他語言的解決思路都是一樣的
(1)保留4位小數,小數不足4位不會用0補齊
0.1 + 0.2
=> 0.30000000000000004
//調整成
parseInt((0.1 + 0.2)*10000)/parseInt(10000)
=> 0.3
(2)保留四捨五入後的5位小數,小數不足5位用0補齊
0.012 * 0.06
=> 0.0007199999999999999
//調整成
parseInt(0.012 * 0.06*1000000)/parseInt(1000000).toFixed(5)
=> 0.0007