BigInteger类 常用方法
- 当编程中,需要处理很大的整数,
long
不够用
long l = 23788888899999999999999999999l;
- 可以使用
BigInteger
的类来搞定 - 在对
BigInteger
进行加减乘除的时候,需要使用对应的方法,不能直接进行+ - * /
- 可以创建一个 要操作的
BigInteger
然后进行相应操作
1. add 加
BigInteger bigInteger = new BigInteger("23788888899999999999999999999");
BigInteger bigInteger2 = new BigInteger("10");
System.out.println(bigInteger);
//解读:
//1. 在对 BigInteger 进行加减乘除的时候,需要使用对应的方法,不能直接进行 + - * /
//2. 可以创建一个 要操作的 BigInteger 然后进行相应操作
BigInteger add = bigInteger.add(bigInteger2);
System.out.println(add);//加
2. subtract 减
BigInteger subtract = bigInteger.subtract(bigInteger2);
System.out.println(subtract);//减
3. multiply 乘
BigInteger multiply = bigInteger.multiply(bigInteger2);
System.out.println(multiply);//乘
4. divide 除
BigInteger divide = bigInteger.divide(bigInteger2);
System.out.println(divide);//除
BigDecimal 类 常用方法
- 当需要保存一个精度很高的数时,
double
不够用,如下就会出现损失精度的情况
double d = 1999.11111111111999999999999977788d;
System.out.println(d);
- 可以用
BigDecimal
来解决
BigDecimal bigDecimal = new BigDecimal("1999.11111111111111999999999999112233");
System.out.println(bigDecimal);
- 如果对
BigDecimal
进行运算,比如:加减乘除,需要使用对应的方法 - 创建一个需要操作的
BigDecimal
然后调用相应的方法即可
1. add 加
BigDecimal bigDecimal = new BigDecimal("1999.11111111111111999999999999112233");
System.out.println(bigDecimal);
BigDecimal bigDecimal2 = new BigDecimal("1.1");
System.out.println(bigDecimal.add(bigDecimal2));
2. subtract 减
System.out.println(bigDecimal.subtract(bigDecimal2));
3. multiply 乘
System.out.println(bigDecimal.multiply(bigDecimal2));
4. divide 除
- 当除数为
1.1
时,会抛出异常ArithmeticException
,这是因为最后的结果除不尽,可能是个无限循环小数,所以抛出异常
System.out.println(bigDecimal.divide(bigDecimal2));//可能抛出异常ArithmeticException
- 如下,把除数改为
2
,就可以被除尽
BigDecimal bigDecimal = new BigDecimal("1999.11111111111111999999999999112233");
System.out.println(bigDecimal);
BigDecimal bigDecimal2 = new BigDecimal("2");
System.out.println(bigDecimal.divide(bigDecimal2));
解决这种出现异常的方法如下:
- 在调用
divide
方法时,指定精度即可,BigDecimal.ROUND_CEILING
- 如果有无限循环小数,就会保留分子的精度
- 如下就不会再抛出异常了
BigDecimal bigDecimal = new BigDecimal("1999.11111111111111999999999999112233");
System.out.println(bigDecimal);
BigDecimal bigDecimal2 = new BigDecimal("1.1");
System.out.println(bigDecimal.divide(bigDecimal2, BigDecimal.ROUND_CEILING));
应用场景:
-
Biglnteger
适合保存比较大的整型 -
BigDecimal
适合保存精度更高的浮点型(小数)