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

相关推荐
半瓶榴莲奶^_^3 小时前
jvm java虚拟机
java·jvm
invicinble9 小时前
这里对java的知识体系做一个全域的介绍
java·开发语言·python
wbs_scy9 小时前
【Linux 线程进阶】进程 vs 线程资源划分 + 线程控制全详解
java·开发语言
ss2739 小时前
食谱推荐系统功能测试如何写?
java·数据库·spring boot·功能测试
AI人工智能+电脑小能手9 小时前
【大白话说Java面试题】【Java基础篇】第15题:JDK1.7中HashMap扩容为什么会发生死循环?如何解决
java·开发语言·数据结构·后端·面试·哈希算法
try2find10 小时前
打印ascii码报错问题
java·linux·前端
014-code10 小时前
CompletableFuture 实战模板(超时、组合、异常链处理)
java·数据库
Nicander10 小时前
多数据源下@transcation事务踩坑
java·后端
それども11 小时前
DELETE 和 TRUNCATE TABLE区别
java·数据库·mysql
sjsjsbbsbsn11 小时前
大模型核心知识总结
java·人工智能·后端