首页 文章

当我四舍五入时,为什么我会得到一个非终止的十进制扩展?

提问于
浏览
1

好的,所以我试图划分2个随机BigDecimal值 . 如果数字不均匀或不规则而不是得到余数,我宁愿将它四舍五入到最接近的整数 . 但是,当我这样做时,我的网站崩溃,我得到以下错误 .

引起:java.lang.ArithmeticException:非终止十进制扩展;没有确切的可表示的小数结果 .

如果我没有将数字四舍五入,我会理解这种情况,但因为我,我不明白为什么会发生这种情况 .

BigDecimal cartQty= (testValue1).getQuantity().getValue();
  BigDecimal cartMultiplier = (testValue2).getQuantity().getValue();
  //below where it crashes so if 4/3 and the value is 1.333 I'd expect to get 2.
  BigDecimal TotalPackageInt=  cartQty.divide(cartMultiplier ).setScale(0, RoundingMode.UP);

2 回答

  • 3

    告诉 BigDecimal 当你执行 divide 时你想要如何舍入 . 像这样:

    BigDecimal TotalPackageInt=  cartQty.divide(cartMultiplier, 0, RoundingMode.UP );
    
  • 3

    您了解操作的意图并不会改变实际Java方法链的语义 .

    您的语句以 cartQty 开头,然后调用 divide(cartMultiplier) . 只有在返回后才会调用 setScale(0, RoundingMode.UP) 的结果 . 如果该部门抛出异常,那么您计划稍后执行的操作无关紧要 .

    鉴于这些是数量,您可以考虑使用 BigInteger 而不是 BigDecimal .

相关问题