拯救你丟失的精度——BigInteger和BigDecimal類(入門)

第三階段 JAVA常見對象的學習

BigInteger和BigDecimal類

BigInteger類

(一) 構造方法:

//針對超過整數範圍的運算(整數最大值:2147483647)
BigInteger(String val)  
複製代碼

(二) 經常使用方法:

//加
public BigInteger add(BigInteger val) //減 public BigInteger subtract(BigInteger val) //乘 public BigInteger multiply(BigInteger val) //除 public BigInteger divide(BigInteger val) //返回商和餘數的數組 public BigInteger[] divideAndRemainder(BigInteger val) 複製代碼
import java.math.BigInteger;

public class BigIntegerDemo {
    public static void main(String[] args) {
        BigInteger bi1 = new BigInteger("100");
        BigInteger bi2 = new BigInteger("50");

        BigInteger[] bis = bi1.divideAndRemainder(bi2);
        System.out.println("商:" + bis[0]);
        System.out.println("餘數:" + bis[1]);
    }
}

//運行結果
商:2
餘數:0
複製代碼

BigInteger類

因爲在運算的時候,float類型和double很容易丟失精度(下例爲演示),因此爲了能精確的表示、計算浮點數,Java提供了BigDecimaljava

public class BigDecimalDemo {
    public static void main(String[] args) {
        System.out.println(0.09 + 0.01);
        System.out.println(1.0 - 0.32);
        System.out.println(1.026 * 100);
        System.out.println(1.502 / 100);
        System.out.println(1.0 - 0.17);
    }
}

//運行結果
0.09999999999999999
0.6799999999999999
102.60000000000001
0.01502
0.83
複製代碼

(一) 構造方法:

咱們來帖一組說明數組

BigDecimal

public BigDecimal(double val)
複製代碼

將double轉換爲BigDecimal ,這是double的二進制浮點值的精確十進制表示。bash

返回的BigDecimal是(10scale × val)是一個整數的最小值。ide

筆記:函數

  1. 這個構造函數的結果可能有些不可預測。 能夠假設在Java中寫入new BigDecimal(0.1)建立一個BigDecimal ,它徹底等於0.1(非標尺值爲1,比例爲1),但實際上等於0.1000000000000000055511151231257827021181583404541015625。 這是由於0.1不能像double (或者做爲任何有限長度的二進制分數)精確地表示。 所以,正在被傳遞給構造的值不是正好等於0.1,雖然表面上。
  2. 該String構造,在另外一方面,是徹底能夠預測的:寫new BigDecimal("0.1")建立BigDecimal這正好等於0.1,正如人們所指望的那樣。 所以, 一般建議使用String constructor優先於此。
  3. 當double必須用做源爲BigDecimal ,注意,此構造提供了一個精確的轉換; 它不會將double轉換爲String使用Double.toString(double)方法,而後使用BigDecimal(String)構造函數相同的結果。 要得到該結果,請使用static valueOf(double)方法。
  • 參數學習

    val - double值轉換爲 BigDecimal 。spa

  • 異常code

    NumberFormatException - 若是 val 是無限或NaN。orm

構造方法:建議使用 → BigDecimal(String s)cdn

(二) 經常使用方法:

import java.math.BigDecimal;

public class BigDecimalDemo2 {
    public static void main(String[] args) {
        BigDecimal bd1 = new BigDecimal("0.09");
        BigDecimal bd2 = new BigDecimal("0.01");
        System.out.println("加:" + bd1.add(bd2));

        BigDecimal bd3 = new BigDecimal("1.0");
        BigDecimal bd4 = new BigDecimal("0.32");
        System.out.println("減:" + bd3.subtract(bd4));

        BigDecimal bd5 = new BigDecimal("1.026");
        BigDecimal bd6 = new BigDecimal("100");
        System.out.println("乘:" + bd5.multiply(bd6));

        BigDecimal bd7 = new BigDecimal("1.502");
        BigDecimal bd8 = new BigDecimal("100");
        System.out.println("除:" + bd7.divide(bd8));
    }
}

//運行結果
加:0.10
減:0.68
乘:102.600
除:0.01502
複製代碼

結尾:

若是內容中有什麼不足,或者錯誤的地方,歡迎你們給我留言提出意見, 蟹蟹你們 !^_^

若是能幫到你的話,那就來關注我吧!(系列文章均會在公衆號第一時間更新)

在這裏的咱們素不相識,卻都在爲了本身的夢而努力 ❤

一個堅持推送原創Java技術的公衆號:理想二旬不止

img
相關文章
相關標籤/搜索