java.math.BigDecimal詳解及加減乘除計算

BigDecimal簡介

  1. BigDecimal用來對需要更大或更小的數進行任意精度的運算。
  2. 在需要精確的小數計算時再使用BigDecimal,BigDecimal的性能比double和float差,在處理龐大,複雜的運算時尤爲明顯。故一般精度的計算沒必要使用BigDecimal。
  3. 儘量使用參數類型爲String的構造函數。
  4. BigDecimal都是不可變的(immutable)的, 在進行每一次四則運算時,都會產生一個新的對象 ,所以在做加減乘除運算時要記得要保存操作後的值。

BigDecimal構造方法

  1. BigDecimal(BigInteger val)
    將 BigInteger轉換成 BigDecimal
  2. BigDecimal(char[] in)
    一個轉換的字符數組表示 BigDecimal成 BigDecimal ,接受字符作爲的相同序列 BigDecimal(String)構造
  3. BigDecimal(double val)
    將 double轉換爲 BigDecimal ,這是 double的二進制浮點值的精確十進制表示
  4. BigDecimal(int val)
    將 int成 BigDecimal
  5. BigDecimal(long val)
    將 long成 BigDecimal
  6. BigDecimal(String val)
    將BigDecimal的字符串表示 BigDecimal轉換爲 BigDecimal

BigDecimal 常用方法 加減乘除運算

BigDecimal a = new BigDecimal(6);
BigDecimal b = new BigDecimal(5);
a.add(b);  //a+b  加
a.subtract(b); // a-b 減
a.multiply(b); // a*b 乘
a.divide(b);// a/b 除
a.doubleValue();//轉換成雙精度 double類型
a.floatValue(); //轉換成單精度 float類型
a.longValue(); //轉換成長整形 long 類型
a.intValue();  //轉換成整形 int 類型
a.pow(3);//a的3次方
a.abs();//a的絕對值

BigDecimal數值比較

BigDecimal a = new BigDecimal(6);
int i = a.compareTo(BigDecimal.ZERO); //和0做比較
i==-1;//表示a小於0
i==0;//表示a=0
i==1;//表示a大於0
boolean b1 = a.subtract(b).compareTo(BigDecimal.ZERO) > 0;//判斷a-b是否大於0

BigDecimal常見異常

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result。
原因:
JAVA中如果用BigDecimal做除法的時候一定要在divide方法中傳遞第二個參數,定義精確到小數點後幾位,否則在不整除的情況下,結果是無限循環小數時,就會拋出以上異常。
解決辦法:

a.divide(b,4,RoundingMode.HALF_UP));

第二個參數是保留小數位數
第三個代表模式
模式:

  1. ROUND_UP 始終對前一位加1 只入不捨
  2. ROUND_DOWN 始終不對小數進行改變 只舍不入
  3. ROUND_CEILING 如果 BigDecimal 爲正,則舍入行爲與 ROUND_UP 相同;如果爲負,則舍入行爲與 ROUND_DOWN 相同。
  4. ROUND_FLOOR如果 BigDecimal 爲正,則舍入行爲與 ROUND_DOWN 相同;如果爲負,則舍入行爲與 ROUND_UP 相同。
  5. ROUND_HALF_UP 四捨五入
  6. ROUND_HALF_DOWN 五舍六入
  7. ROUND_HALF_EVEN 如果捨棄部分左邊的數字爲奇數,則舍入行爲與 ROUND_HALF_UP 相同;如果爲偶數,則舍入行爲與 ROUND_HALF_DOWN 相同。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章