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

相关推荐
不光头强11 分钟前
IDEA的基本设置和使用
java·ide·intellij-idea
毕设源码-朱学姐33 分钟前
【开题答辩全过程】以 产品报价系统为例,包含答辩的问题和答案
java·eclipse
无心水1 小时前
深入Java线程池:BlockingQueue实现全景解析与实战指南
java·后端·面试
Java水解1 小时前
JAVA面试题大全(200+道题目)
java·后端·面试
Predestination王瀞潞1 小时前
Java EE开发技术(第四章:过滤器和监听器银行管理系统-下)
java·java-ee
摇滚侠1 小时前
Spring Boot3零基础教程,Profile 环境隔离用法,笔记55
java·spring boot·笔记
编程岁月1 小时前
java面试-0305-java线程调度方法?sleep()和wait()区别?
java·开发语言·面试
DoveLx1 小时前
如何集成ElasticSearch到Spring Boot+MySQL项目中
java·elasticsearch
lazily-c2 小时前
Web后端开发总结
java·学习·web·1024程序员节
凭君语未可2 小时前
深度解析Java的多态特性
java·开发语言