Java 当我已经在取整时,为什么会得到一个非终止小数扩展?

Java 当我已经在取整时,为什么会得到一个非终止小数扩展?,java,bigdecimal,Java,Bigdecimal,好的,我试着除以2个随机的大十进制值。如果数字是不均匀或不规则的,而不是得到余数,我更愿意将其四舍五入到最接近的整数。然而,当我这样做的时候,我的网站崩溃了,我得到了以下错误 导致原因:java.lang.arithmetricException:非终止十进制扩展;没有可精确表示的十进制结果 如果我没有把数字四舍五入的话,我会理解这种情况,但因为我是,我不明白为什么会发生这种情况 BigDecimal cartQty= (testValue1).getQuantity().getValue(

好的,我试着除以2个随机的大十进制值。如果数字是不均匀或不规则的,而不是得到余数,我更愿意将其四舍五入到最接近的整数。然而,当我这样做的时候,我的网站崩溃了,我得到了以下错误

导致原因:java.lang.arithmetricException:非终止十进制扩展;没有可精确表示的十进制结果

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

  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);

您理解操作的意图这一事实并不会改变实际Java方法链的语义

您的语句以
cartQuantity
开头,然后对其调用
divide(cart乘数)
。只有在返回后,才会对其结果调用
setScale(0,RoundingMode.UP)
。如果部门抛出异常,那么您以后打算做什么并不重要


考虑到这些是数量,您可以考虑使用<代码> BigInteger <代码>代替<代码> BigDecimal < /C> >

< P>您了解操作的意图并不会改变实际java方法链的语义。

您的语句以
cartQuantity
开头,然后对其调用
divide(cart乘数)
。只有在返回后,才会对其结果调用
setScale(0,RoundingMode.UP)
。如果部门抛出异常,那么您以后打算做什么并不重要


鉴于这些是数量,您可以考虑使用<代码> BigInteger <代码>而不是<代码> BigDecimal < /代码> .< /p> < p> >代码> BigDecimal < /C> >当您在<代码> >除除< /代码>时,您想如何舍入。像这样:

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

告诉
BigDecimal
在执行
除法时要如何取整。像这样:

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

先生,你帮了大忙。我知道这是操作顺序的问题,但不知道在这种情况下如何使用舍入模式。谢谢,先生,你帮了大忙。我知道这是操作顺序的问题,但不知道在这种情况下如何使用舍入模式。谢谢