錯誤案例
(int)(Float.parseFloat(price)*100) 這樣處理,對於8.90這樣的價格會轉化成889,實際應該是890纔對
(int)(Double.parseDouble(price)*100) ,對於8.90轉化的結果是對的,但是對於 1.15會把它轉化成114,又出問題了
錯誤分析
float和double都採用了micro-optimization方式提升計算性能,所以都有計算偏差。可以使用BigDecimal來避免精度丟失。
正確用法
可見Double,Float都不能很好的處理精度問題,終極處理方法是使用BigDecimal,這裏我們的框架對它有封裝,那就是Money類,很簡單:
new Money(price).getCent();