天天看點

BigDecimal精度問題 and double基礎類型預設小數位置問題

## 1、BigDecimal精度問題

場景:将double類型的數值轉為BigDecimal來做數學運算

問題:  BigDecimal d1 = new BigDecimal(698.745685);

           列印輸出d1 = 698.7456849999999999999999

          如果保留 5位小數  則輸出 698.74568 (正确的應該是698.74569)

解決方法  :将double數值初始化為BigDecimal 時,用方法BigDecimal.valueOf(698.745685)

或者将double類型轉為String >>>>new BigDecimal("698.745685");

## 2、将BigDecimal轉為double類型的數值時,會自動截取“無效”小數位數

舉例:double d2 = BigDecimal.valueOf(2360.000).doubleValue();  列印輸出d2= 2360.0

解決方法  BigDecimal.valueOf(2360.000).toString()。或者用DecimalFormat

因為這個原因,導緻無論 我怎麼設定小數位置,

隻要是這類數值620.0000  》》》》620.0

                          563.12000》》》》563.12

得到的double 值最終都自動删除小數位數中 0 的部分,影響數值格式 化

這個問題隐藏的很深,沒遇到特殊資料或特殊用途真的不易發現