Java中的BigDecimal

BigDecimal

位置:java.math包中
作用:精确计算浮点数
创建方式:BigDecimal bd=new BigDecimal();
方法:
BigDecimal add(BigDecimal bd); //加
BigDecimal subtract(BigDecimal bd); //减
BigDecimal multiply(BigDecimal bd); //乘
BigDecimal divide(BigDecimal bd); //除

注意:当进行除法运算时,如果存在除不尽的情况,需要指定保留的小数点位数和舍入方式,否则会抛出异常

在讨论BigDecimal的具体使用方法时,我们先来看一下double型数据在计算时的应用

运行以下代码:

public class Demo4 {
  public static void main(String[] args) {
      double d1 = 1.0;
      double d2 = 0.9;
      System.out.println(d1 - d2); 
      double result = (1.4 - 0.5) / 0.9;
      System.out.println(result); 

运行结果如下:
在这里插入图片描述
我们发现运行出的结果并不是0.1和1,这是因为double类型的数据在存储时采用的是近似值存储的方式,也就是说我们看到是把1.0赋值给了d1,把0.9赋值给了d2,但实际上计算机在存储时可能是d1=0.999999999,d2=0.89999999(实际上d1,d2的值并不是这个,此处只是举例),所以我们在使用double类型数据进行计算时是存在精度误差的,因此在对数据有精度要求(如:银行)的计算时我们采用BigDecimal类型来计算

运行以下代码

      BigDecimal bd1 = new BigDecimal("1.0");//采用字符型是因为字符型数据表示的是准确的值
      BigDecimal bd2 = new BigDecimal("0.9");
      //加法
      BigDecimal r2 = bd1.add(bd2);
      System.out.println(r2);
      //减法
      BigDecimal r1 = bd1.subtract(bd2);
      System.out.println(r1);
      //乘法
      BigDecimal r3 = bd1.multiply(bd2);
      System.out.println(r3);
      //除法
      BigDecimal r4 = bd2.divide(new BigDecimal("0.7"));
      System.out.println(r4);

运行结果如下:
在这里插入图片描述
我们发现在程序执行到除法这一步时,抛出了一个异常,这是因为0.9除以0.7是除不尽的,所以程序执行到这一步时没有继续走下去,而是抛出了一个异常,也就是我们在文章开头所说的:当进行除法运算时,如果存在除不尽的情况,需要指定保留的小数点位数和舍入方式,否则会抛出异常

因此我们在进行除法运算时要使用以下格式:
divide(BigDecimal bd,int scal,RoundingMode mode)

参数scal:指定精确到小数点后几位
参数mode:指定小数部分的舍入方式,通常采用四舍五入的方式,取值为BigDecimal.ROUND_HALF_UP
所以我们将除法运算时的代码修改成以下形式即可:

//除法
BigDecimal r4 = new BigDecimal("0.9").divide((new BigDecimal("0.7")), 2,BigDecimal.ROUND_HALF_UP);//保留两位有效数字,并且采用四舍五入的方式
        System.out.println(r4);

运行结果如下:
在这里插入图片描述
以上就是Java中BigDecimal的使用介绍,感谢您阅读本文,如有疑问,欢迎在评论区留言!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值