Rounding necessary错误解决Java的BigDecimal除法的

出现Rounding necessary错误原因是使用了 BigDecimal 的 setScale 方法导致。

错误原因:setScale方法保留小数位数小于实际位数并且未指定roundingMode参数即报错。如下代码:

 BigDecimal rs = new BigDecimal("2057.9200");
 rs.setScale(2);

上述代码实际数值是2057.9200是4位小数,而使用setScale方法保留2位小数时会报错。
解决方法:

【一、指定setScale的第二个参数roundingMode(推荐)】

如下所示:

 BigDecimal rs = new BigDecimal("2057.9200");
 rs.setScale(2, RoundingMode.HALF_UP);

setScale的第二个参数为roundingMode,此值是一个常量,具体取值及含义可通过JDK文档查得

RoundingMode枚举定义了多种舍入模式,例如:

RoundingMode.UP:远离零方向舍入。
RoundingMode.DOWN:向零方向舍入。
RoundingMode.CEILING:向正无穷方向舍入。
RoundingMode.FLOOR:向负无穷方向舍入。
RoundingMode.HALF_UP:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向上舍入的舍入模式。
RoundingMode.HALF_DOWN:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则为向下舍入的舍入模式。
RoundingMode.HALF_EVEN:向“最接近的”数字舍入,如果与两个相邻数字的距离相等,则向相邻的偶数舍入。
RoundingMode.UNNECESSARY:断言请求的操作具有精确的结果,因此不需要舍入

【二、保留小数位数大于/等于实际小数位数】

 BigDecimal rs = new BigDecimal("2057.9200");
 rs.setScale(5);

保证保留的小数位数大于等于实际小数位数也可以,但很多时候我们不知道实际小数位数是多少,所以建议使用第一种方式解决。

posted @ 2024-08-12 14:53  当个胖子  阅读(1556)  评论(0编辑  收藏  举报