[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

你可能感兴趣的:(Java)