BigDecimal 精度問題

2021-10-25 18:50:10 字數 1707 閱讀 7867

在使用bigdecimal過程中,暫時遇到兩個問題,都是精度問題,乙個是精度丟失,乙個是精度顯示問題。

bigdecimal建立物件有很多種方式:

通過double型別去宣告bigdecimal物件時,就發生精度不准的問題

這個就不建議使用了,可以換種方式去解決這個問題,用string構造器構建物件:

設定好物件的精度大小也可以解決這個問題:

這種顯示科學計數法的問題,主要產生原因有兩個:

1、小數點位數大於6;

2、只有最後乙個小數非0,其他位都位0;

這種情況不會影響計算,只會影響顯示,列印日誌等要用到tostring方法的情況。

罪魁禍首是 bigdecimal的tostring方法:

只要宣告bigdecimal之後就有了stringcache這個屬性,debug從頭跟到尾沒有看到stringcache在**設定過。tostring方法中恰恰使用了這個屬性,所以導致tostring顯示的是科學計數法。

解決方案:

toplainstring方法就會顯示完整的數值。

BigDecimal解決精度損失的問題

1 system.out.println 中的數字預設是double型別的,double型別小數計算不精準。2 使用bigdecimal類構造方法傳入double型別時,計算的結果也是不精確的!因為不是所有的浮點數都能夠被精確的表示成乙個double 型別值,有些浮點數值不能夠被精確的表示成 dou...

double轉BigDecimal的精度問題

1.問題 今天在寫 將double 轉成bigdecimal 的時候 發現轉成的資料跟原資料不太一樣 double b 57.3 bigdecimal decimalb new bigdecimal b system.out.println decimalb 結果 57.29999999999999...

BigDecimal除法問題

bigdecimal做除法時,盡量使用divide bigdecimal divisor,intscale,introundingmode 這個方法 divisor 被除數 scale保留小數字數 roundingmode保留小數時採用的方法,一般使用bigdecimal.round up 四捨五入...