關於BigDecimal 的不精確計算問題

2021-04-18 16:44:55 字數 712 閱讀 7530

關於bigdecimal 的不精確計算問題

public static void main(string args)
輸入結果為 504.549999999999982946974341757595539093017578125

實際結果應為 504.55

現在作了如下函式,可以解決一部分處理,但是測試時,有些case,還是有不精確的時候

比如 0.123 和 5e10相乘 scale設定為10的時候,小數部分並不全為零

public static int getlonglength(bigdecimal numericalvalue);

if (!(snumericalvalue.indexof(".") < 0)) else

if(arrayvalues[0].contains("-"))

int intlength = arrayvalues[0].length();

return intlength;

}public static bigdecimal muliply(bigdecimal bg1,bigdecimal bg2,int scale,roundingmode roundingmode)

需要特別指出的是 numericalvalue.toplainstring(); toplainstring() 不會返回xxexx的科學技術法的形式

BigDecimal準確設定小數點後的精度

因為bigdecimal的原因吧,也可以說是double的問題吧 new bigdecimal currentlat2 時值不再是 2.455675而是2.455674999999999999999999 因此在保留5位小數,四捨五入時,就變成2.45567而不是2.45568 後乙個正確是因為沒形...

關於BigDecimal,小數型別的處理

小數字數 bigdecimal.setscale 方法用於格式化小數點 setscale 1 表示保留一位小數,預設用四捨五入方式 setscale 1,bigdecimal.round down 直接刪除多餘的小數字,如2.35會變成2.3 setscale 1,bigdecimal.round ...

關於BigDecimal的操作和遇到的問題

在很多的專案會使用到bigdecimal對數字的操作 雖然不是支付相關的相關,但是有些地方也需要精確計算 對於這個東西,使用了好幾次,只是每次用到都要去查閱一翻,太懶,就在這裡做一下總結,以便後期使用。bigdecimal bigstart new bigdecimal starttimenum b...