BigInteger和BigDecimal类

BigInteger和BigDecimal类


要点提示:BigInteger和BigDecimal类可以用于表示任意大小和精度的整数或者十进制数。

​ 如果要进行非常大的数的计算或者高精度浮点值的计算,可以使用java.math包中的BigInteger和BigDecimal类。他们都是不可变的。long类型的最大整数值为

long.MAX_VALUE(即9223372036854775807)。BigInteger的实例可以表示任意大小的整数。可以使用new BigInteger(String)和new BigDecimal(String)来创建BigInteger和BigDecimal的实例,使用add、subtract、multiple、divide和remainder方法完成算数运算,使用compareTo方法比较两个大数字。例如下面代码创建两个BigInteger对象并且将它们进行相乘:

BigInteger a = new BigInteger("9223372036854775807");
BigInteger b = new BigInteger("2");
BigInteger c = a.multiply(b);//9223372036854775807*2
System.out.println(c);

它的输出为18446744073709551614。

对BigDecimal对象的精度没有限制。如果结果不能终止,那么divide方法会抛出ArithmeticException异常。但是可以使用重载divide(BigDecimal d,int scale,int roundingMode)方法来指定制度和摄入方式来避免这个异常,这里的scale是指小数点后最小的整数位数。例如下面的代码创建两个尺度为20、摄入方式为BigDecimal.ROUND_UP的BigDecimal对象。


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

输出为0.33333333333333333334。

注意,一个整数的阶乘可能会很大,下面的程序给出可以返回任意整数阶乘的方法。

LargeFactorial.java

package ohhh;
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;//等价于=new BigInteger("1")
        for(int i=1;i<=n;i++)
            result=result.multiply(new BigInteger(i+""));//BigInteger(String)
        return result;
    }

}

输出结果是:

50! is30414093201713378043612608166064768844377641568960512000000000000

猜你喜欢

转载自blog.csdn.net/qq_40265501/article/details/80019642