1. 程式人生 > 其它 >java中用BigDecimal解決金額的儲存問題

java中用BigDecimal解決金額的儲存問題

技術標籤:javajava

Java中只要涉及到錢的交易就會有金額欄位的考慮。最近的發現問題有精度損失。

最開始用int欄位去儲存金額,當入庫到資料庫會有小數字段。如115.63就直接報錯。那麼改用varchar去儲存。

在實際業務場景,需取出時需要根據金額做邏輯操作。當時採用的方法,cash為115.63,用parseDouble解析 發現了值變了,精度丟失。導致介面報錯。

 String.valueOf(Double.parseDouble(cash)*100)

v於是測試

String sb = String.valueOf(Double.parseDouble("80.74")*100);
System.out.println(sb);

tr輸出 8073.999999999999

最終通過BigDecimal去解決

BigDecimal bg = new BigDecimal("80.74");
String cash = String.valueOf(bg.multiply(new BigDecimal(100)).intValue());
System.out.println(cash);

輸出

所以通過此次實驗,對待金額儲存的最佳方案。Varchar儲存以分為單位的金額。在實際邏輯中如果要用,需要通過BigDecimal類去解決。這個類很強大,加減乘除及各種型別轉換的方法都有封裝。