[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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值