BigInteger & BigDecimal
- 超过long类型的整数用BigInteger
- 超过Double类型的浮点数用BigDecimal
- 用速度换精确度。
BigInteger
/*
java.math.BigInteger类: 代表超级大的整数,不可变的任意精度的整数。
1.构造方法:
参数: 必须是String类型的数字,内部不能出现非数字内容
public BigInteger(String val) {
this(val, 10);
}
2.常用方法:
// +
public BigInteger add(BigInteger val):
// -
public BigInteger subtract(BigInteger val):
// *
public BigInteger multiply(BigInteger val):
// /
public BigInteger divide(BigInteger val):
*/
- BigInteger -> 基本类型时可以用XXXValueExact()
BigInteger b = new BigInteger("12");
b.shortValueExact();
b.byteValueExact();
b.intValueExact();
b.longValueExact();
- 如果超出了转换类型的范围,会抛出 ArithmeticException
BigDecimal
/*
java.math.BigDecimal类: 代表超级大的小数,不可变的任意精度的小数。
1.构造方法:
public BigDecimal(String val):
作用: 把构造方法参数String类型的val,转换成BigDecimal类的对象
参数: 必须是String类型的数字,内部不能出现非数字内容
2.常用方法:
+ - * 运算和BigInteger一样
/ 需要注意,可能会出现 无限循环/无限不循环的结果,需要提供保留几位小数
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode):
参数:
int scale: 要保留几位小数
int roundingMode: 如何保留小数
BigDecimal.ROUND_UP 向上加1。
BigDecimal.ROUND_DOWN 直接舍去。
BigDecimal.ROUND_HALF_UP 四舍五入。
*/