BigInteger与BigDecimal
BigInteger
背景: Integer 类作为 int 的包装类,能存储的最大的整数值为 2^31 - 1, Long类也是有限的,最大为 2^63 - 1. 如果要表示再大的整数,不管是基本数据类型还是他们的包装类都无能为力,更不用说进行运算了。
java.math包的BigInteger 可以表示不可变的任意精度的整数。BigInteger 提供所有 Java的基本整数操作符的对应物,并提供 java.lang.Math的所有方法相关。另外,BigInteger 还提供一下运算:模算术、GCD计算、质数测试、素数生成、位操作以及一些其他操作。
构造器
- BigInteger(Sring val): 根据字符串构建BigInteger对象
测试
-
public class Main { public static void main(String[] args) { BigInteger bigInteger = new BigInteger("214125151526734574578548484845854845"); System.out.println(bigInteger); } }
-
输出
-
214125151526734574578548484845854845
BigDecimal
背景: 一般的Float类和Double类可以用来做科学计算或者工程计算,但是在 商业计算中,要求数字精度比较高,故用 *java.math.BigDecimal
BigDecimal类支持不可变的、任意精度的有符号十进制定点数。
构造器
- public BigDecimal(double val);
- public BigDecimal(String val);
常用方法
- public BigDecimal add(BigDecimal augend); 加法
- public BigDecimal substract(BigDecimal subtrahend); 减法
- public BigDecimal multiply(BigDecimal multiplicand); 乘法
- public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode); 除法
测试
-
import java.math.BigDecimal; import java.math.BigInteger; import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { BigDecimal bigDecimal = new BigDecimal("15.1231241251512512512521"); BigDecimal bigDecimal1 = new BigDecimal("11.121"); System.out.println(bigDecimal.add(bigDecimal1)); System.out.println(bigDecimal.subtract(bigDecimal1)); System.out.println(bigDecimal.multiply(bigDecimal1)); // 要求保留15位小数, BigDecimal.ROUND_HALF_DOWN四舍五入 System.out.println(bigDecimal1.divide(bigDecimal, 15, BigDecimal.ROUND_HALF_DOWN)); } }
注意: 如果出现java.lang.ArithmeticException则表示除不尽,各可以规定保留小数位数,或者进位模式(四舍五入)