前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >除法运算时的一个常见异常之java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representabl

除法运算时的一个常见异常之java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representabl

作者头像
翎野君
发布2023-05-12 20:11:51
2770
发布2023-05-12 20:11:51
举报
文章被收录于专栏:翎野君翎野君

一、背景

今天在计算库存消耗百分比(消耗的库存/总库存)的时候遇到了一个错误,java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.

通过异常的描述,我们知道这是因为,某些场景下对于如1/3会得到一个无穷小数,这个时候需要定义计算结果要保留到小数点后几位,否则就会抛出上面的异常。

二、方法介绍

出现异常时使用的方法,此方法没有精度设置。

代码语言:javascript
复制
public BigDecimal divide(BigDecimal divisor) 

在进行除法运算的时候,我们需要使用下面的方法来进行精度控制。

代码语言:javascript
复制
public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

附:不要忘记判断分母是否为0 

三、代码如下

代码语言:javascript
复制
BigDecimal b1 = new BigDecimal(1);
BigDecimal b2 = new BigDecimal(3);
if (!Objects.equals(b2, BigDecimal.ZERO)) {
    // 不能整除,数学上是无穷小数,抛出ArithmeticException异常
    //BigDecimal b3 = b1.divide(b2);
    // 指定计算结果的精度,保留到小数点后几位,以及舍入模式
    BigDecimal b3 = b1.divide(b2, 4, BigDecimal.ROUND_HALF_UP);
    System.out.println(b3.toEngineeringString());
}  
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、背景
  • 二、方法介绍
  • 三、代码如下
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档