为什么我已经四舍五入了,却得到了一个不终止的十进制扩展?
Why Am I Getting a Non-terminating decimal expansion when I am rounding up already?
好的,所以我正在尝试除以 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);
您理解操作意图这一事实不会改变实际 Java 方法链的语义。
您的语句以 cartQty
开头,然后调用 divide(cartMultiplier)
。只有 在 之后 returns 被 setScale(0, RoundingMode.UP)
调用其结果。如果除法抛出异常,那么你后面打算做什么就无所谓了。
鉴于这些是数量,您可以考虑使用 BigInteger
而不是 BigDecimal
。
告诉 BigDecimal
您在执行 divide
时希望如何舍入。像这样:
BigDecimal TotalPackageInt= cartQty.divide(cartMultiplier, 0, RoundingMode.UP );
好的,所以我正在尝试除以 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);
您理解操作意图这一事实不会改变实际 Java 方法链的语义。
您的语句以 cartQty
开头,然后调用 divide(cartMultiplier)
。只有 在 之后 returns 被 setScale(0, RoundingMode.UP)
调用其结果。如果除法抛出异常,那么你后面打算做什么就无所谓了。
鉴于这些是数量,您可以考虑使用 BigInteger
而不是 BigDecimal
。
告诉 BigDecimal
您在执行 divide
时希望如何舍入。像这样:
BigDecimal TotalPackageInt= cartQty.divide(cartMultiplier, 0, RoundingMode.UP );