6.4. 大数字运算

6.4.1. BigInteger

eg

import java.math.BigInteger;

public class BigIntegerDemotest {
public static void main(String[] args) {
    BigInteger bigLnstance = new BigInteger("4"); //实例化一个大数字
//  取该大数字加2的操作
    System.out.println("加法操作:"+ bigLnstance.add(new BigInteger("2")));
//  取该大数字减2的操作
    System.out.println("加法操作:"+ bigLnstance.subtract(new BigInteger("2")));
//  取该大数字乘以2的操作
    System.out.println("乘法操作:"+ bigLnstance.multiply(new BigInteger("2")));
//  取该大数字除以2的操作
    System.out.println("除法操作:"+ bigLnstance.divide(new BigInteger("2")));
//  取该大数除以3的商
    System.out.println("取商:"+ bigLnstance.divideAndRemainder(new BigInteger("3"))[0]);
//  取该大数除以3的余数
    System.out.println("取余数:"+ bigLnstance.divideAndRemainder(new BigInteger("3"))[1]);
//  取该大数字的2次方
    System.out.println("做2次方操作:" + bigLnstance.pow(2));
//  取该大数字的相反数
    System.out.println("取相反数操作:"+ bigLnstance.negate());



}
}

/*输出信息
加法操作:6
加法操作:2
乘法操作:8
除法操作:2
取商:1
取余数:1
做2次方操作:16
取相反数操作:-4
*/

6.4.2. BigDecimal

import java.math.BigDecimal;

public class BigDecimalDemo {
    static final int location = 10;

    /*
     * 定义加法方法,参数为加数与被加数
     * @param value1    相加第一个数
     * @param value2    相加第二个数
     * @return          两数之和
     */
    public BigDecimal add(double value1,double value2) {
//      实例化Decimal对象
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.add(b2);      //调用加法方法
    }




    /*
     * 定义加法方法,参数为加数与被加数
     * @param value1    相减第一个数
     * @param value2    相减第二个数
     * @return          运算结果
     */

    public BigDecimal sub(double value1,double value2) {
//      实例化Decimal对象
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.subtract(b2);     //调用减法方法

    }



    /*
     * 定义乘法方法,参数为加数与被加数
     * @param value1    相乘第一个数
     * @param value2    相乘第二个数
     * @return          运算结果
     */

    public BigDecimal mul(double value1,double value2) {
//      实例化Decimal对象
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.multiply(b2);     //调用乘法方法

    }


    /*
     * 定义除法方法,参数为加数与被加数
     * @param value1    被除数
     * @param value2    除数
     * @return          运算结果
     */

    public BigDecimal div(double value1,double value2) {
        return div(value1,value2,location); //调用自定义除法方法

    }
    public BigDecimal div(double value1,double value2,int b) {
        if (b<0) {
            System.out.println("b值必须大于等于0");
        }
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
//      调用除法方法,商小数点后保留b位,并将结果进行四舍五入操作
        return b1.divide(b2,b,BigDecimal.ROUND_HALF_UP);

    }
    public static void main(String[] args) {
        BigDecimalDemo b = new BigDecimalDemo();
        System.out.println("两个数字相加结果:"+ b.add(-7.5, 8.9));
        System.out.println("两个数字相减结果:"+ b.sub(-7.5, 8.9));
        System.out.println("两个数字相乘结果:"+ b.mul(-7.5, 8.9));
        System.out.println("两个数字相除结果,结果保留小数后10位:"+b.div(10, 2));
        System.out.println("两个数字相除,保留小数后5位:"+b.div(-7.5, 8.9,5));
    }
}


/*
两个数字相加结果:1.4
两个数字相减结果:-16.4
两个数字相乘结果:-66.75
两个数字相除结果,结果保留小数后10位:5.0000000000
两个数字相除,保留小数后5位:-0.84270
 */