關於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...