java中用BigDecimal解決金額的儲存問題
阿新 • • 發佈:2020-12-17
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類去解決。這個類很強大,加減乘除及各種型別轉換的方法都有封裝。