BigDecimal

Java在java.math包中提供的API類BigDecimal,用來對超過16位有效位的數進行精確的運算

雙精度浮點型變量double可以處理16位有效數

一般情況下,對於那些不需要準確計算精度的數字,我們可以直接使用Float和Double處理,但是Double.valueOf(String) 和Float.valueOf(String)會丟失精度。所以開發中,如果我們需要精確計算的結果,則必須使用BigDecimal類來操作。

 

BigDecimal所創建的是對象,故我們不能使用傳統的+、-、*、/等算術運算符直接對其對象進行數學運算,而必須調用其相對應的方法。方法中的參數也必須是BigDecimal的對象。構造器是類的特殊方法,專門用來創建對象,特別是帶有參數的對象。

 

BigDecimal常用構造函數

2.1、常用構造函數

  1. BigDecimal(int)

    創建一個具有參數所指定整數值的對象

  2. BigDecimal(double)

    創建一個具有參數所指定雙精度值的對象

  3. BigDecimal(long)

    創建一個具有參數所指定長整數值的對象

  4. BigDecimal(String)

    創建一個具有參數所指定以字符串表示的數值的對象

使用示例:

        BigDecimal a =new BigDecimal(0.1);
        System.out.println("a values is:"+a);
        System.out.println("=====================");
        BigDecimal b =new BigDecimal("0.1");
        System.out.println("b values is:"+b);

結果示例:

a values is:0.1000000000000000055511151231257827021181583404541015625
=====================
b values is:0.1

原因分析:

1)參數類型爲double的構造方法的結果有一定的不可預知性。有人可能認爲在Java中寫入newBigDecimal(0.1)所創建的BigDecimal正好等於 0.1(非標度值 1,其標度爲 1),但是它實際上等於0.1000000000000000055511151231257827021181583404541015625。這是因爲0.1無法準確地表示爲 double(或者說對於該情況,不能表示爲任何有限長度的二進制小數)。這樣,傳入到構造方法的值不會正好等於 0.1(雖然表面上等於該值)。

2)String 構造方法是完全可預知的:寫入 newBigDecimal(“0.1”) 將創建一個 BigDecimal,它正好等於預期的 0.1。因此,比較而言, 通常建議優先使用String構造方法

3)當double必須用作BigDecimal的源時,請注意,此構造方法提供了一個準確轉換;它不提供與以下操作相同的結果:先使用Double.toString(double)方法,然後使用BigDecimal(String)構造方法,將double轉換爲String。要獲取該結果,請使用static valueOf(double)方法。

 

三、BigDecimal常用方法詳解

3.1、常用方法

  1. add(BigDecimal)

    BigDecimal對象中的值相加,返回BigDecimal對象

  2. subtract(BigDecimal)

    BigDecimal對象中的值相減,返回BigDecimal對象

  3. multiply(BigDecimal)

    BigDecimal對象中的值相乘,返回BigDecimal對象

  4. divide(BigDecimal)

    BigDecimal對象中的值相除,返回BigDecimal對象

  5. toString()

    將BigDecimal對象中的值轉換成字符串

  6. doubleValue()

    將BigDecimal對象中的值轉換成雙精度數

  7. floatValue()

    將BigDecimal對象中的值轉換成單精度數

  8. longValue()

    將BigDecimal對象中的值轉換成長整數

  9. intValue()

    將BigDecimal對象中的值轉換成整數

3.2、BigDecimal大小比較

java中對BigDecimal比較大小一般用的是bigdemical的compareTo方法

int a = bigdemical.compareTo(bigdemical2)

返回結果分析:

a = -1,表示bigdemical小於bigdemical2;
a = 0,表示bigdemical等於bigdemical2;
a = 1,表示bigdemical大於bigdemical2;

舉例:a大於等於b

new bigdemica(a).compareTo(new bigdemical(b)) >= 0
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章