BigDecimal api

1、BigDecimal類概述        

   由於在運算的時候,float類型和double很容易丟失精度,演示案例。所以,爲了能精確的表示、計算浮點數,Java提供了BigDecimal   

  不可變的、任意精度的有符號十進制數。   

2、構造方法

  public BigDecimal(String val):建議使用參數爲字符串的構造方法,如果參數爲double或float,還是會出現不可預知的精度問題

3、BigDecimal類成員方法

  public BigDecimal add(BigDecimal augend):加        

  public BigDecimal subtract(BigDecimal subtrahend):減        

  public BigDecimal multiply(BigDecimal multiplicand):乘        

  public BigDecimal divide(BigDecimal divisor):除        

  public BigDecimal divide(BigDecimal divisor,int scale, int roundingMode):商,幾位小數,舍取模式

/**
 * 看程序寫結果:結果和我們想的有一點點不一樣,這是因爲float類型的數據存儲和整數不一樣導致的。它們大部分的時候,都是帶有有效數字位。
 * 由於在運算的時候,float類型和double很容易丟失精度,演示案例。所以,爲了能精確的表示、計算浮點數,Java提供了BigDecimal
 * BigDecimal類:不可變的、任意精度的有符號十進制數,可以解決數據丟失問題。
 */
常規計算方式

public class BigDecimalDemo01 {
    public static void main(String[] args) {
        //輸出會出現精度問題
        System.out.println(0.09 + 0.01); //0.09999999999999999
        System.out.println(1.0 - 0.32); //0.6799999999999999
        System.out.println(1.015 * 100); //101.49999999999999
        System.out.println(1.301 / 100); //0.013009999999999999
        System.out.println(1.0 - 0.12); //0.88
    }
}

 

精度計算

public class BigDecimalDemo02 {
    public static void main(String[] args) {
        BigDecimal bd1 = new BigDecimal("0.09");
        BigDecimal bd2 = new BigDecimal("0.01");
        System.out.println("add:"+bd1.add(bd2));
        System.out.println("------------------");
        BigDecimal bd3 = new BigDecimal("1.0");
        BigDecimal bd4 = new BigDecimal("0.32");
        System.out.println("subtract:"+bd3.subtract(bd4));
        System.out.println("------------------");
        BigDecimal bd5 = new BigDecimal("1.015");
        BigDecimal bd6 = new BigDecimal("100");
        System.out.println("multiply:"+bd5.multiply(bd6));
        System.out.println("------------------");
        BigDecimal bd7 = new BigDecimal("1.301");
        BigDecimal bd8 = new BigDecimal("100");
        System.out.println("divide:"+bd7.divide(bd8));
        System.out.println("divide:"
                + bd7.divide(bd8, 3, BigDecimal.ROUND_HALF_UP));
        System.out.println("divide:"
                + bd7.divide(bd8, 8, BigDecimal.ROUND_HALF_UP));
        System.out.println("------------------");
    }
}

 

輸出結果:

add:0.10

------------------

subtract:0.68

------------------

multiply:101.500

------------------

divide:0.01301

divide:0.013

divide:0.01301000

------------------

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章