int
, long
,double
的表数范围都有限。BigInteger
可以表示任意大小整数,BigDecimal
对数字的精度没有限制。
BigInteger
和BigDecimal
的实例只能用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
的好办法。
BigInteger
和BigDecimal
都在java.math
包里,使用时使用语句:
import java.math.*;
Introduction to Java Programming 10.9