BigDecimal在进行除法运算时需要注意四舍五入的位置

我们在进行A除B的时候,需要将四舍五入的逻辑放入除法的过程中就定义,不要等到A/B结果出来了再去进行四舍五入,这样会出现问题。下面举例

10%3

我们拿10除3为例,很明显,结果是一个除不尽的小数3.3333...

直接除
java 复制代码
    public static void main(String[] args) {
        BigDecimal A = new BigDecimal("10");
        BigDecimal B = new BigDecimal("3");
        System.out.println(A.divide(B).setScale(2, RoundingMode.HALF_UP));
    }

结果报错Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result. 表示没有精确的表示decimal结果,异常在除法计算的过程中就抛出了,所以都没走到setScale()方法

正确的方式
java 复制代码
    public static void main(String[] args) {
        BigDecimal A = new BigDecimal("10");
        BigDecimal B = new BigDecimal("3");
        System.out.println(A.divide(B, 2, RoundingMode.HALF_UP));
    }

结果为3.33,正确的保留两位小数和四舍五入了,这是在除法计算的过程中就执行了的。

相关推荐
BestAns6 小时前
一文带你吃透 Java 反射机制
java·后端
wasp5207 小时前
AgentScope Java 核心架构深度解析
java·开发语言·人工智能·架构·agentscope
2501_916766547 小时前
【Springboot】数据层开发-数据源自动管理
java·spring boot·后端
自在极意功。7 小时前
MyBatis 动态 SQL 详解:从基础到进阶实战
java·数据库·mybatis·动态sql
软件管理系统7 小时前
基于Spring Boot的便民维修管理系统
java·spring boot·后端
百***78758 小时前
Step-Audio-2 轻量化接入全流程详解
android·java·gpt·php·llama
快乐肚皮8 小时前
MySQL递归CTE
java·数据库·mysql·递归表达式
廋到被风吹走8 小时前
【Spring】DispatcherServlet解析
java·后端·spring
廋到被风吹走8 小时前
【Spring】PlatformTransactionManager详解
java·spring·wpf