十進制 二進制
0.1 0.0001 1001 1001 1001 ...
0.2 0.0011 0011 0011 0011 ...
0.3 0.0100 1100 1100 1100 ...
0.4 0.0110 0110 0110 0110 ...
0.5 0.1
0.6 而只能做到一定程度上的準確,這是無法避免的精度遺失:
在JavaScript中問題還要複雜些,這裡只給一些在Chrome中測試資料:
1.0-0.9 == 0.1 False
1.0-0.6 == 0.4 True
1.0- 0.5 == 0.5 True
1.0-0.4 == 0.6 True
1.0-0.3 == 0.7 True
1.0.3 == 0.7 True
1.0-0.20. True
解決
那如何來避免這類1.0-0.9 != 0.1 的非bug型問題發生呢?下面給出一種目前用的比較多的解, 在判斷浮點運算結果前對計算結果進行精度縮小,因為在精度縮小的過程總會自動四捨五入:
}
(1.0-0.7).isEqual(0.3); // return true