Java数字处理类--Math类--大数字运算

Java中大数字的操作类:

        java.math.BigInteger

        java.math.BigDecimal

1.BigInteger类

        Int的最大值为2^31-1,如果要处理更大的数,就必须用到BigInteger,BigInteger类中提供了加、减、乘、除、绝对值、相反数、最大公约数、判断是否为质数等方法。

        使用BigInteger类,可以实例化一个BigIngeger对象,并自动调用相应的构造函数。BigInteger有很多构造函数,但是最直接的一种方式是参数以字符串的形式代表要处理的数字。

语法:

        public BigInteger(String value); 

        将2转化为BigInteger类型:

        BigInteger twoInstance = new BigInteger("2");

BigInteger类中常用运算方法
运算方法 功能描述
public BigInteger add(BigInteger val) 做加法运算
public BigInteger subtract(BigInteger val) 做减法运算
public BigInteger multiply(BigInteger val) 做乘法运算
public BigInteger devide(BigInteger val) 做除法运算
public BigInteger remainder(BigInteger val) 做取余操作
public BigInteger[] divideAndRemainder(BigInteger val) 用数组返回商和余数,结果数组中第一个值为商,第二个数为余数
public BigInteger pow(int exponent) 进行取参数的exponent操作
public BigInteger negate() 取相反数
public BigInteger shiftLeft(int n) 将数字左移n位,如果n为负数,做右移操作
public BigInteger shiftRight(int n) 将数字右移n位,如果n为负数,做左移操作
public BigInteger and(BigInteger val) 做与操作
public BigInteger or(BigInteger val) 做或操作
public int compareTo(BigInteger val) 做数字比较操作
public boolean equals(Object x) 当x是BigInteger类型的数字且数值相等时,返回true,否则返回false
public BigInteger min(BigInteger val) 返回较小的数值
public BigInteger max(BigInteger val) 返回较大的数值
package MathInfo;

import java.math.BigInteger;

public class BigIntegerDemo {
    public static void main(String[] args) {
        BigInteger bigInstance = new BigInteger("4");
        //将该数+2操作
        System.out.println("加法操作:" + bigInstance.add(new BigInteger("2"))); //加法操作:6
        //将该数-2操作
        System.out.println("减法操作:" + bigInstance.subtract(new BigInteger("2")));    //减法操作:2
        //将该数*2操作
        System.out.println("乘法操作:" + bigInstance.multiply(new BigInteger("2")));    //乘法操作:8
        //将该数➗2操作
        System.out.println("除法操作:" + bigInstance.divide(new BigInteger("2")));  //除法操作:2
        //该数÷3的商
        System.out.println("取商操作:" + bigInstance.divideAndRemainder(new BigInteger("3"))[0]);   //取商操作:1
        //该大数字÷3的余数
        System.out.println("大数字取余操作:" + bigInstance.divideAndRemainder(new BigInteger("3"))[1]);    //大数字取余操作:1
        //该大数字的2次方
        System.out.println("该大数字的2次方:" + bigInstance.pow(2));   //该大数字的2次方:16
        //该大数字的相反数
        System.out.println("该大数字的相反数:" + bigInstance.negate()); //该大数字的相反数:-4
    }


}

 2.BigDecimal类

        java.math.BigDecimal类支持任何精度的定点数,适用与float和double类型数据来做科学计算、货币计算等。

        BigDecimal型的数字可以用来做超大浮点数的运算,包括加、减、乘、除等,在所有运算中,除法是最复杂的,因为在除不尽的情况下,末尾小数点的处理需要被考虑。

2.1 构造方法:

        2.1.1 public BigDecimal(double val)

                实例化时将双精度型转换为BigDecimal类型

        2.1.2 public BigDecimal(String val)

                实例化时将字符串型转换为BigDecimal类型       

BigDecimal类的常用方法
方法 功能说明
public BigDecimal add(BigDecimal augend) 加法操作
public BigDecimal subtract(BigDecimal subtrahend) 减法操作
public BigDecimal multiply(BigDecimal multiplicand) 乘法操作
public BigDecimal devide(BigDecimal divisor, int scale, int roundingMode) 除法操作,参数分别代表:除数,商的小数点后的位数,近似处理模式

         BigDecimal类中的divide()方法有多种设置,用于返回商末位小数点的处理,如:

BigDecimal类中divide()方法的多种处理模式
模式 含义
BigDecimal.ROUND_UP 商的最后一位若大于0,则向前进位,正负数都如此
BigDecimal.ROUND_DOWN 商的最后一位无论是什么数字,都省略
BigDecimal.ROUND_CEILING 商如果是正数,按照ROUND_UP处理,如果是负数,按照ROUND_DOWN处理。这2种模式的处理都会使近似值大于等于实际值
BigDecimal.ROUND_FLOOR 与ROUND_CEILING相反,商如果是正数,按照ROUND_DOWN处理,如果是负数,按照ROUND_CEILING处理。这2种模式的处理都会使近似值小于等于实际值
BigDecimal.ROUND_HALF_DOWN 对商进行四舍五入操作,如果商最后一位小于等于5,则做舍弃操作;若最后一位大于5,则做进位操作,如7.5≈7
BigDecimal.ROUND_HALF_UP 对商进行四舍五入操作,如果商最后一位小于5,则做舍弃操作;若最后一位大于等于5,则做进位操作,如7.5≈8
BigDecimal.ROUND_HALF_EVEN 如果商的倒数第二位为奇数,则按照ROUND_HALF_UP处理;如果商的倒数第二位为偶数,则按照ROUND_HALF_DOWN处理;如7.5≈8, 8.5≈8
/**
 * 实现加减乘除
 */
package MathInfo;

import java.math.BigDecimal;

public class BigDecimalDemo {
    static final int location = 10;

    //定义加法
    public BigDecimal add(double value1, double value2) {
//        BigDecimal b1 = new BigDecimal(value1);   //不能用这种方法,最后相加结果小数位非常多,不精确
//        BigDecimal b2 = new BigDecimal(value2);
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.add(b2);
    }

    //定义减法
    public BigDecimal subTract(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.subtract(b2);
    }

    //定义乘法
    public BigDecimal multiPly(double value1, double value2) {
        BigDecimal b1 = new BigDecimal(Double.toString(value1));
        BigDecimal b2 = new BigDecimal(Double.toString(value2));
        return b1.multiply(b2);
    }

    //定义除法,参数为除数与被除数以及商小数点后位数
    public BigDecimal myDivide(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));
        //调用divide方法,商后保留b位小数,并做四舍五入操作
        return b1.divide(b2, b, BigDecimal.ROUND_HALF_UP);

    }

    public BigDecimal myDivide(double value1, double value2) {
        return myDivide(value1, value2, location);
    }

    public static void main(String[] args) {
        BigDecimalDemo b = new BigDecimalDemo();
        System.out.println("两个数字相加结果:" + b.add(-7.5, 8.9)); //两个数字相加结果:1.4
        System.out.println("两个数字相减结果:" + b.subTract(8, 8.9));   //两个数字相减结果:-0.9
        System.out.println("两个数字相乘结果:" + b.multiPly(8, -2));    //两个数字相乘结果:-16.00
        System.out.println("两个数字相除结果:" + b.myDivide(10, 2));    //两个数字相除结果:5.0000000000
        System.out.println("两个数字相除结果,保留后面5位小数:" + b.myDivide(10, 3, 5));    //两个数字相除结果,保留后面5位小数:3.33333
    }
}

 

你可能感兴趣的:(Java,java,开发语言,大数字运算)