欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java 大数字类BigDecimal类

程序员文章站 2024-03-14 19:58:29
...

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提供了一个三个参数的方法:
Java 大数字类BigDecimal类
其中第三个参数是近似值处理模式:
Java 大数字类BigDecimal类
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));

输出结果:
Java 大数字类BigDecimal类

相关标签: Java面向对象