價格精度問題

錯誤案例

(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();



發佈了26 篇原創文章 · 獲贊 2 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章