轉:BigDecimal 使用方法詳解

轉貼:http://zhangyinhu8680.iteye.com/blog/1536397java

BigDecimal 由任意精度的整數非標度值 和 32 位的整數標度 (scale) 組成。若是爲零或正數,則標度是小數點後的位數。若是爲負數,則將該數的非標度值乘以 10 的負 scale 次冪。所以,BigDecimal 表示的數值是 (unscaledValue × 10-scale)。 

能夠處理任意長度的浮點數運算。 

BigDecimal add(BigDecimal val) //加法 

BigDecimal subtract (BigDecimal val) //減法 

BigDecimal multiply (BigDecimal val)  //乘法 

BigDecimal divide (BigDecimal val,RoundingMode mode)  //除法 

具體使用 計算: 
  
  加:   a.add(b); 

  減:   a.subtract(b); 

  乘:   a.multiply(b); 

  除:   a.divide(b,2);//2爲精度取值 
除法細解: 
  //注意如下相除會拋出異常,緣由: 經過BigDecimal的divide方法進行除法時當不整除,出現無限循環小數時,就會拋異常  
        //BigDecimal divideBg = a.divide(b);   
        //解決方法是:設置精確度;就是給divide設置精確的小數點 
divide(xxxxx,2, BigDecimal.ROUND_HALF_EVEN)   
        //其中的第二個參數表示的是:保留小數點以後多少位  

BigDecimal不整除拋出的異常,請設置精確度! 
Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 
at java.math.BigDecimal.divide(BigDecimal.java:1278) 
at main.Main.main(Main.java:41) 

下面咱們來看看除法的詳細說明: 
   divide(BigDecimal divisor, int scale, introundingMode) 


BigDecimal的setScale方法 

BigDecimal.setScale() 

方法用於格式化小數點 

表示保留一位小數,默認用四捨五入方式 

setScale(1) 

直接刪除多餘的小數位,如2.35會變成2.3 setScale(1,BigDecimal.ROUND_DOWN) 

進位處理,2.35變成2.4  setScale(1,BigDecimal.ROUND_UP) 

四捨五入,2.35變成2.4  setScale(1,BigDecimal.ROUND_HALF_UP) 

四捨五入,2.35變成2.3,若是是5則向下舍setScaler(1,BigDecimal.ROUND_HALF_DOWN) 

  
注意點一 

scale指的是你小數點後的位數。 
scale()就是BigDecimal類中的方法。如 

BigDecimal b = new BigDecimal("123.456"); 

b.scale()返回的就是3 
注意點二roundingMode是小數的保留模式。它們都是BigDecimal中的常量字段, 

有不少種,如 
BigDecimal.ROUND_HALF_UP表示的就是4舍5入 

注意點三 

divide(BigDecimal divisor, int scale, introundingMode)的意思是說: 
我用一個BigDecimal對象除以divisor後的結果,而且要求這個結果保留有scale個小數位,roundingMode表示的就是保留模式是什麼,是四捨五入啊仍是其它的 

BigDecimal aa = new  BigDecimal(135.95 );  

BigDecimal bb=new  BigDecimal("100" );  

BigDecimal result=aa.multiply(bb);  //作乘法 

3.java中 BigDecimal類型的能夠轉換到double類型: 
  用 變量.doubleValue();函數  便可將 BigDecimal 類型數據 轉化爲 double類型! 
4.java BigDecimal比較大小 

能夠經過BigDecimal的compareTo方法來進行比較。 
返回的結果是int類型,-1表示小於,0是等於,1是大於。 

看下面這個例子: 
BigDecimal a = new BigDecimal("1.00"); 
BigDecmial b = new BigDecimal(1); 

緣由是:BigDecimal比較時,不只比較值,並且還比較精度

if(a.compareTo(b)==0) 結果是true 

比較大小能夠用 a.compareTo(b) 
返回值    -1 小於   0 等於    1 大於 

5.BigDecimal取其中最大、最小值、絕對值、相反數: 

  a.max (b) //比較取最大值 

  a.min(b) //比較取最小值 

  a.abs()//取最絕對值 

  a.negate()//取相反數 


6.下面是注意 : 

BigDecimal枚舉常量用法摘要  : 

CEILING   
          向正無限大方向舍入的舍入模式。 
DOWN   
          向零方向舍入的舍入模式。 
FLOOR   
          向負無限大方向舍入的舍入模式。 
HALF_DOWN   
          向最接近數字方向舍入的舍入模式,若是與兩個相鄰數字的距離相等,則向下舍入。 
HALF_EVEN   
          向最接近數字方向舍入的舍入模式,若是與兩個相鄰數字的距離相等,則向相鄰的偶數舍入。 
HALF_UP   
          向最接近數字方向舍入的舍入模式,若是與兩個相鄰數字的距離相等,則向上舍入。 
UNNECESSARY   
          用於斷言請求的操做具備精確結果的舍入模式,所以不須要舍入。 
UP   
          遠離零方向舍入的舍入模式。 

 ide

相關文章
相關標籤/搜索