不可變的、任意精度的有符號十進位制數。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...