zoukankan      html  css  js  c++  java
  • 除法运算时的一个常见异常之java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

    一、背景

    今天在计算库存消耗百分比(消耗的库存/总库存)的时候遇到了一个错误,java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

    通过异常的描述,我们知道这是因为,某些场景下对于如1/3会得到一个无穷小数,这个时候需要定义计算结果要保留到小数点后几位,否则就会抛出上面的异常。

    二、方法介绍

    出现异常时使用的方法,此方法没有精度设置。

    public BigDecimal divide(BigDecimal divisor) 
    

    在进行除法运算的时候,我们需要使用下面的方法来进行精度控制。

    public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)
    

    附:不要忘记判断分母是否为0   

    三、代码如下

    BigDecimal b1 = new BigDecimal(1);
    BigDecimal b2 = new BigDecimal(3);
    if (!Objects.equals(b2, BigDecimal.ZERO)) {
        // 不能整除,数学上是无穷小数,抛出ArithmeticException异常
        //BigDecimal b3 = b1.divide(b2);
        // 指定计算结果的精度,保留到小数点后几位,以及舍入模式
        BigDecimal b3 = b1.divide(b2, 4, BigDecimal.ROUND_HALF_UP);
        System.out.println(b3.toEngineeringString());
    }  

      

  • 相关阅读:
    AD用户移除所属组
    Mysql中文乱码问题完美解决方案
    将sqllite3数据库迁移到mysql
    检查远端服务器端口是否打开
    远程桌面卡
    不同平台的线程并发接口对比
    stm32之中断配置
    stm32之CMSIS标准、库目录、GPIO
    stm32 中断几个库函数实现过程分析
    Tree命令使用
  • 原文地址:https://www.cnblogs.com/lingyejun/p/11588685.html
Copyright © 2011-2022 走看看