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,正确的保留两位小数和四舍五入了,这是在除法计算的过程中就执行了的。

相关推荐
真实的菜1 分钟前
消息队列处理模式:流式与批处理的艺术
java
盖世英雄酱5813616 分钟前
Java 内存管理技巧(新手必看集合篇)
java
码农小灰18 分钟前
Java 8 Stream API 入门到实践详解
java·java案例
步、步、为营23 分钟前
.NET 事件模式举例介绍
java·开发语言·.net
cui_hao_nan26 分钟前
设计模式——模板方法
java·设计模式
小吕学编程26 分钟前
HttpServletRequest常用方法
java·http
在未来等你27 分钟前
Java并发编程实战 Day 11:并发设计模式
java·设计模式·多线程·并发编程·threadlocal·生产者消费者·读写锁
李少兄39 分钟前
解决 idea提示`SQL dialect is not configured` 问题
java·sql·intellij-idea
BreezeDove1 小时前
IDEA安装&迁移IDEA配置数据位置
java·ide·intellij-idea
太阳之神aboluo1 小时前
压测软件-Jmeter
java·运维·jmeter