BigDecimal的相关使用

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

bigDecimal的相关运算:加减乘除

bigDecimal的运算需要调用方法;

加法运算:

bignum1.add(bignum2)

减法运算:

bignum1.subtract(bignum2)

乘法运算:

bignum1.multiply(bignum2)

除法运算:

bignum1.divide(bignum2)

注意: 在使用以上方法时,bignum1和bignum2均不能为null,否则会报空指针异常。

示例代码如下:

public static void main(String[] args)throws Exception {
   BigDecimal bignum1 = new BigDecimal("10");
   BigDecimal bignum2 = new BigDecimal("5");
   BigDecimal bignum3 = null;
   //加法
   bignum3 =  bignum1.add(bignum2);
   System.out.println("求和:" + bignum3);

   //减法
   bignum3 = bignum1.subtract(bignum2);
   System.out.println("求差:" + bignum3);

   //乘法
   bignum3 = bignum1.multiply(bignum2);
   System.out.println("乘法积:" + bignum3);

   //除法
   bignum3 = bignum1.divide(bignum2);
   System.out.println("除法结果:" + bignum3);
}
复制代码

运行结果如下:

求和:15

求差:5

乘法积:50

除法结果:2

为什么要用BigDecimal?

为什么要用BigDecimal呢,这里存在的一个很大的问题就是精度问题,因为在Java中的浮点数据类型,比如float,或者是double,都会在高精度运算中丢失精度;从而导致数据计算不准确。

尤其是涉及到银行、金额等业务时,一个不小心就会导致灾难式的问题产生。

所以,在不能使用float和double,我们就会去使用不会丢失精度的BigDecimal。

BigDecimal的其他功能

BigDecimal中也提供了小数的四舍五入等方法,并且在保留小数的方法中也有几个可选项。

如下示例代码,大家可以运行一下试试。

public static void main(String[] args) throws Exception {
      BigDecimal b = new BigDecimal("1.125");
      //表示保留一位小数,默认用四舍五入方式。
      double result1 = b.setScale(1).doubleValue();
      System.out.println("默认用四舍五入方法" + result1);
      //直接删除多余的小数位。如2.35会变成2.3;
      double result2 = b.setScale(1, BigDecimal.ROUND_DOWN).doubleValue();
      System.out.println("删除多余的小数位:" + result2);
      //进位处理,2.35变成2.4
      double result3 = b.setScale(1, BigDecimal.ROUND_UP).doubleValue();
      System.out.println("直接进一" + result3);
      //四舍五入,2.35变成2.4
      double result4 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
      System.out.println("四舍五入的值:" + result4);
      //四舍五入,2.35变成2.3,如果是5则向下舍
      double result5 = b.setScale(2, BigDecimal.ROUND_HALF_DOWN).doubleValue();
      System.out.println("四舍六入的值:" + result5);
  }
复制代码

猜你喜欢

转载自juejin.im/post/7019697831229259790