BigInteger类和BigDecimal类

BigInteger类

BigInteger适合保存比较大的整型
当在编程中遇到需要保存一个特别大的数字,比如地球的人口。
这时如果用long类型保存可能都不够了,此时就需要用到BigInteger
BigInteger类和BigDecimal类_第1张图片

  • BigInteger不能直接±*/
  • add()加
  • subtract()减
  • multiply()乘
  • divide()除
    使用演示:
public class test2 {
    public static void main(String[] args) {
        BigInteger bigInteger = new BigInteger("999999999999999999999999999999999999");
        BigInteger big2 = new BigInteger("1");
        //加
        BigInteger add = bigInteger.add(big2);
        System.out.println(add);
        //减
        BigInteger subtract = bigInteger.subtract(big2);
        System.out.println(subtract);
        //乘
        BigInteger multiply = bigInteger.multiply(big2);
        System.out.println(multiply);
        //除
        BigInteger divide = bigInteger.divide(big2);
        System.out.println(divide);
    }
}

BigDecimal类

BigDecimal类用于保存精度需求很高的浮点类型(小数),比如天文运算,银行,
在使用double类型保存时,小数超过一定长度就会损失精度

double num = 902.1234567891112222333444555666;
        System.out.println(num);

运行结果是:
902.1234567891112
很明显后面的精度直接没了,此时就需要用到BigDecimal保存
BigDecimal和BigInteger一样不能直接加减乘除,同样是使用方法

使用演示:

public class test2 {
    public static void main(String[] args) {
        BigDecimal bigDecimalr = new BigDecimal("902.1234567891112222333444555666");
        BigDecimal big2 = new BigDecimal("1.1");
        //加
        BigDecimal add = bigDecimalr.add(big2);
        System.out.println(add);
        //减
        BigDecimal subtract = bigDecimalr.subtract(big2);
        System.out.println(subtract);
        //乘
        BigDecimal multiply = bigDecimalr.multiply(big2);
        System.out.println(multiply);
        //除
        //BigDecimal divide = bigDecimalr.divide(big2);
        //System.out.println(divide);
    }
}

注意点:在精度很高的除法运算中,很可能会得到无限小数,比如上面的数除以1.1
而导致报异常,所以需要我们处理一下

public class test2 {
    public static void main(String[] args) {
        BigDecimal bigDecimalr = new BigDecimal("902.12");
        BigDecimal big2 = new BigDecimal("1.1");
        //除
        BigDecimal divide = bigDecimalr.divide(big2,BigDecimal.ROUND_CEILING);
        System.out.println(divide);
    }
}

ROUND_CEILING表示将结果限制到被除数的小数精度长度,比如上面的被除数是902.12,只有两位小数,那么除1.1后得到的结果也是保留两位小数。

你可能感兴趣的:(JAVASE,All,java,jvm,算法)