BigInteger类和BigDecimal类都可以实现大数字的运算,不同的是BigDecimal加入小数计算,BigInteger类通常用来进行工程和科学计算,但是如果要进行商业的计算(股票等涉及金额精度的计算)我们就要用到BigDecimal类,BigDecimal类可以实现任意精度小数的计算,也就是说可以计算出小数点后任意一位的数字。
1、构造方法:
BigDecimal d = new BigDecimal("3.14");
BigDecimal d = new BigDecimal(3.14);
BigDecimal d = BigDecimal.valueOf(3.14);
2、常用方法:
- 加:add(BigDecimal val)
- 减:subtract(BigInteger val)
- 乘:multiply(BigInteger val)
- 除:divide(BigInteger val)
- 除:devide(BigInteger divisor,int scale,int roundingMode)
BigDecimal的常用方法和BigInteger大体相同,其中不同的就是BigDecimal的除法:divide提供了一个三个参数的方法:
其中第三个参数是近似值处理模式:
3、例子:我们来尝试一下这个divide这个方法:
public staic void main(String[] args){
BigInteger i1 = new BigInteger("30");
BigInteger i2 = new BigInteger("7");
System.out.println(i1.divide(i2));
}
我们通过上面的尝试最终结果报了一个异常,因为30除以7结果是一个无尽的小数,所以会报异常,那么我们怎么处理呢?
Sytem.out.println("22位小数\t\t"+i1.divide(i2,22,BigDecimal.ROUND_UP));
Sytem.out.println("最后一位进位\t"+i1.divide(i2,20,BigDecimal.ROUND_UP));
Sytem.out.println("忽略最后一位\t"+i1.divide(i2,20,BigDecimal.ROUND_DOWN));
Sytem.out.println("正值进位负值忽略\t"+i1.divide(i2,20,BigDecimal.ROUND_CEILING));
Sytem.out.println("正值忽略负值进位\t"+i1.divide(i2,20,BigDecimal.ROUND_FLOOR));
输出结果: