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