java.math.BigDecimal 的使用

1:问题场景:在金额的计算中, 会出现精度丢失的情况。

    数字计算时,计算机会将数字转换为最近似的二进制,在进行计算,这就会导致计算结果精度不正确。

    例如:0.1+0.2 =0.30000000000000004   。这个问题在众多编程语言中都出现过。

2:解决办法:这个问题在java中是使用java.math.BigDecimal进行计算。

3:常用方法:加减乘除,比较大小,是否为0,保留n为小数,向上向下,四舍五入。

      A : 加减乘除   

          BigDecimal  num= new BigDecimal ("10");

          num.add(num);

          num.subtract(num);

          num.multiply(num);

          num.divide(num);

     B :比较大小,是否为0

         num.compareTo(num)==1

         这个方法结果有-1 ,0 ,1 分别表示小于,大于,等于

         BigDecimal.ZERO 则表示0

      C:保留n位小数,向上向下取整,四舍五入,当出现无限循环小数时使用

         setScale的第一个参数是小数位数, 这个示例是保留2位小数, 后面是四舍五入规则.

         直接移除n位:

         num.setScale(n,BigDecimal.ROUND_DOWN)

         进位:

         num.setScale(n,BigDecimal.ROUND_UP)

         四舍五入,5进位

         num.setScale(n,BigDecimal.ROUND_HALP_UP)

         四舍五入,5舍弃

         num.setScale(n,BigDecimal.ROUND_HALP_DOWN)

     D:当小数位过长出现科学计算法时,去除末尾0,方法:stripTrailingZeros() 。不显示科学计算法 转换string。

        num.stripTrailingZeros().toString()

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java的`BigDecimal`是用于高精度计算的类。它提供了大数的精确计算,适用于处理需要精确小数位数的情况,例如金融计算或科学计算。 `BigDecimal`可以处理任意精度的数值,并提供了各种运算方,如加、减、乘和除等。它还支持舍入模式和比较操作。 使用`BigDecimal`时需要注意以下几点: 1. `BigDecimal`对象是不可变的,每次进行运算都会返回一个新的`BigDecimal`对象。 2. 构造一个`BigDecimal`对象时,可以使用字符串、整型、浮点型等作为参数。 3. 进行除运算时,需要指定除运算规则和舍入模式。 4. 要比较两个`BigDecimal`对象的大小,可以使用`compareTo()`方。 下面是一个简单的示例代码,演示了如何使用`BigDecimal`进行精确计算: ```java import java.math.BigDecimal; public class BigDecimalExample { public static void main(String[] args) { BigDecimal num1 = new BigDecimal("10.5"); BigDecimal num2 = new BigDecimal("5.2"); // 加 BigDecimal sum = num1.add(num2); System.out.println("Sum: " + sum); // 减 BigDecimal difference = num1.subtract(num2); System.out.println("Difference: " + difference); // 乘 BigDecimal product = num1.multiply(num2); System.out.println("Product: " + product); // 除 BigDecimal quotient = num1.divide(num2, 2, BigDecimal.ROUND_HALF_UP); System.out.println("Quotient: " + quotient); // 比较大小 int comparison = num1.compareTo(num2); if (comparison > 0) { System.out.println("num1 is greater than num2"); } else if (comparison < 0) { System.out.println("num1 is less than num2"); } else { System.out.println("num1 is equal to num2"); } } } ``` 希望这个简单的解释和示例能帮到你!如果有任何其他问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值