BigDecimal用法和注意點

2021-06-08 23:29:01 字數 1786 閱讀 3927

不可變的、任意精度的有符號十進位制數。bigdecimal 由任意精度的整數非標度值 和 32 位的整數標度 (scale) 組成。如果為零或正數,則標度是小數點後的位數。如果為負數,則將該數的非標度值乘以 10 的負 scale 次冪。因此,bigdecimal 表示的數值是 (unscaledvalue × 10-scale)。

可以處理任意長度的浮點數運算。

bigdecimal add(bigdecimal val) //bigdecimal 加法

bigdecimal subtract (bigdecimal val) //bigdecimal 減法

bigdecimal multiply (bigdecimal val)  //bigdecimal 乘法

bigdecimal divide (bigdecimal val,roundingmode mode) 

下面是簡單的運算:

bigdecimal aa = new  bigdecimal(135.95 ); 

bigdecimal bb=new  bigdecimal("100" ); 

bigdecimal result=aa.multiply(bb); 

下面是注意 :

1.result.setscale(2 ,bigdecimal.round_half_even),這是乙個什麼運算呢,看api:

可以通過兩種型別的操作來處理 bigdecimal 的標度:標度/捨入操作和小數點移動操作。標度/捨入操作(setscale 和 round)返回 bigdecimal,其值近似地(或精確地)等於運算元的值,但是其標度或精度是指定的值;即:它們會增加或減少對其值具有最小影響的儲存數的精度。小數點移動操作(movepointleft 和 movepointright)返回從運算元建立的 bigdecimal,建立的方法是按指定方向將小數點移動乙個指定距離。

「2」就表示小數點後面留取幾位,而後面的 bigdecimal.round_half_even表示的是 看a pi

列舉常量摘要 

ceiling  

向正無限大方向捨入的捨入模式。

down  

向零方向捨入的捨入模式。

floor  

向負無限大方向捨入的捨入模式。

half_down  

向最接近數字方向捨入的捨入模式,如果與兩個相鄰數字的距離相等,則向下捨入。

half_even  

向最接近數字方向捨入的捨入模式,如果與兩個相鄰數字的距離相等,則向相鄰的偶數捨入。

half_up  

向最接近數字方向捨入的捨入模式,如果與兩個相鄰數字的距離相等,則向上捨入。

unnecessary  

用於斷言請求的操作具有精確結果的捨入模式,因此不需要捨入。

up  

遠離零方向捨入的捨入模式。

2.關於bigdecimal格式化

public string formatvalue(object value) else else

}return content;

} 使用這樣乙個方法可以達到格式化的效果,其中value instanceof bigdecimal,表示的是字元型別是bigdecimal型別的時候執行,這裡的numberformat就表示字元型別,下面的兩句**就表示小數點後面的精確位數。

這裡還要提到numberformat的其他兩個型別:

getcurrencyinstance(): 返回當前預設 環境的貨幣格式

currencyinstance(): 返回指定語言 環境的數字格式,一般是百分比格式

BigDecimal用法和注意點

不可變的 任意精度的有符號十進位制數。bigdecimal 由任意精度的整數非標度值 和 32 位的整數標度 scale 組成。如果為零或正數,則標度是小數點後的位數。如果為負數,則將該數的非標度值乘以 10 的負 scale 次冪。因此,bigdecimal 表示的數值是 unscaledvalu...

BigDecimal用法總結

bigdecimal常用於金額的計算,下面總結下這次專案中bigdecimal的用法。1.加減乘除 2.設定精度 3.取反 加減乘除分別呼叫函式 public bigdecimal add bigdecimal value public bigdecimal subtract bigdecimal ...

Bigdecimal常見各種用法

bigdecimal與int double string型別的相互轉換 int轉為bigdecimal int a 3 bigdecimal b new bigdecimal a bigdecimal轉為int bigdecimal b new bigdecimal 5 int a b.intval...