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

相关推荐
7 :)5 分钟前
第三月(下)第六章:反射+设计模式
java·jvm·设计模式
OldGj_14 分钟前
「LangChain4j入门 — JavaAI程序」
java·ai·langchain·langchain4j
就爱学编程15 分钟前
重生之我在异世界学编程之C语言:深入预处理篇(下)
android·java·c语言
杰哥技术分享15 分钟前
Public Key Retrieval is not allowed
java
一只爱打拳的程序猿16 分钟前
【SpringBoot】配置文件
java·spring boot·spring
knight-n32 分钟前
Redis网络模型
java·redis·mybatis
付春员35 分钟前
根据PDF模板单个PDF导出到浏览器和多个PDF打包ZIP导出到浏览器
java·javascript·pdf
2401_8543910836 分钟前
SSM 寝室管理系统:住宿管理的科技之光
java·运维·科技·架构
Mercury_@2237 分钟前
功能篇:springboot实现pdf加水印,5种方案
java·后端·pdf
七禾页话40 分钟前
使用Java得hutool工具实现验证码登录
java·验证码