Java中的BigDecimal

本文介绍Java中BigDecimal类的使用方法,包括加、减、乘、除等操作,特别强调了在除法运算中如何处理除不尽的情况,以确保计算的准确性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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的使用介绍,感谢您阅读本文,如有疑问,欢迎在评论区留言!

Java中,BigDecimal是用于高精度计算的类。它可以处理非常大或非常小的数值,并提供了精确的计算结果。关于BigDecimal的一些重要用法和特点如下所述: 1. 构造方法: BigDecimal类有多个构造方法。其中,可以使用double类型或String类型的参数来创建BigDecimal对象。当使用double类型参数创建BigDecimal对象时,需要注意double类型的不精确性,可能会导致计算结果不准确。因此,在使用double类型参数创建BigDecimal对象时,最好使用String类型参数来确保精确性。 2. 精确计算: BigDecimal提供了各种精确计算的方法,如加法、减法、乘法和除法。这些方法可以通过调用BigDecimal对象的相应方法来执行计算。需要注意的是,BigDecimal的除法方法可能会抛出ArithmeticException异常,例如当除数为0时。为了避免这种情况,建议使用除法方法的重载方法,指定小数位数和舍入模式。 3. 不可预知性: 在使用参数类型为double的构造方法时,需要注意其不可预知性。由于double类型的不精确性,可能会导致无法准确表示某些数值,以及计算结果的不准确性。因此,在需要精确计算的场景中,建议使用String类型的构造方法来创建BigDecimal对象。 总结起来,BigDecimalJava中用于高精度计算的类。它可以处理大型或小型数值,并提供精确的计算结果。在使用BigDecimal时,应注意使用适当的构造方法来创建对象,并使用精确计算方法来执行计算。此外,对于需要精确计算的场景,建议使用String类型的构造方法来创建BigDecimal对象,以避免double类型的不准确性带来的问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [java中的BigDecimal详解及使用](https://blog.youkuaiyun.com/u012060033/article/details/109983829)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [javaBigDecimal 详解](https://blog.youkuaiyun.com/qq_35868412/article/details/89029288)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值