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

相关推荐
我叫张土豆10 分钟前
在 OpenClaw Java 对话框输入一句话后,系统是如何运行的?
java·开发语言·人工智能
liangbo717 分钟前
JVM规范第 4 章:class 文件格式
java·jvm
橘子汽水16818 分钟前
Leetcode 236,437:二叉树的最近公共祖先,路径总和III
java·数据结构
数据狐(Datafox)25 分钟前
1688商品详情API技术解析与落地应用(含标准 JSON 示例)
java·数据库·json
君顾133 分钟前
AI智能商城实战指南:从架构设计到部署落地的完整技术方案
java·开发语言·多商户
Rain的Java大神之路35 分钟前
SkyWalking从0-1部署成功实战
java·后端·架构
就叫飞六吧36 分钟前
Spring 动态注册与移除 Bean 科普
java·后端·spring
IMPYLH40 分钟前
HTML 的 <legend> 元素
java·前端·html
运行时异常42 分钟前
WMS 仓储系统集成 AI Agent 实战】第 1 讲:从零搭建开发环境——pgvector 装不上、模型选错、依赖冲突,一天踩完三个大坑
java
夕除43 分钟前
redis--008
java·jvm·数据库