1. 程式人生 > >[Java] 表示無限大小整數的BigInteger和無限精度的BigDecimal

[Java] 表示無限大小整數的BigInteger和無限精度的BigDecimal

int, longdouble的表數範圍都有限。BigInteger可以表示任意大小整數,BigDecimal對數字的精度沒有限制。

BigIntegerBigDecimal的例項只能用new BigInteger(String)new BigDecimal(String)建立。
對應各種運算的方法: add, subtract, multiply, divide, remainder compareTo

對於BigDecimal,如果divide方法的結果不能終止,將丟擲異常ArithmeticException,解決辦法就是呼叫過載方法 divide(BigDecimal d, int scale, int roundingMode)

, 其中引數scale為小數點後位數。

BigDecimal a = new BigDecimal(1.0);
BigDecimal b = new BigDecimal(3);
BigDecimal c = a.divide(b, 20, BigDecimal.ROUND_UP);
System.out.println(c);

輸出:

0.33333333333333333334.

計算階乘的例子,一般不能使用int,否則很快就會超出表數範圍:

import java.math.*;

public class LargeFactorial {
	public static void main(String[] args) {
		System.out.println("50! is \n" + factorial(50));
	}
	
	public static BigInteger factorial(long n) {
		BigInteger result = BigInteger.ONE;
		for (int i = 1; i <= n; i++)
			result = result.multiply(new BigInteger(i + "")); 
		return result;
	}
}

BigInteger.ONE 對應 new BigInteger("1"). i + ""是數值轉換為String的好辦法。

BigIntegerBigDecimal都在java.math包裡,使用時使用語句:

import java.math.*;

Introduction to Java Programming 10.9