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

相关推荐
laplace012312 小时前
Java八股—MySQL
java·mysql·oracle
熙客13 小时前
TiDB:分布式关系型数据库
java·数据库·分布式·tidb
你想考研啊14 小时前
linux安装jdk和tomcat和并自启动
java·linux·tomcat
悟能不能悟16 小时前
java的java.sql.Date和java.util.Date的区别,应该怎么使用
java·开发语言
高山上有一只小老虎17 小时前
java 正则表达式大全
java·正则表达式
_院长大人_17 小时前
设计模式-工厂模式
java·开发语言·设计模式
凌波粒18 小时前
MyBatis完整教程IDEA版(2)--ResultMap/注解/一对多/多对一/lombok/log4j
java·intellij-idea·mybatis
蓝-萧18 小时前
【玩转全栈】----Django基本配置和介绍
java·后端
priority_key18 小时前
排序算法:堆排序、快速排序、归并排序
java·后端·算法·排序算法·归并排序·堆排序·快速排序
汤姆yu19 小时前
基于SpringBoot的动漫周边商场系统的设计与开发
java·spring boot·后端