在使用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 四捨五入...