![](/img/trans.png)
[英]ArithmeticException: “Non-terminating decimal expansion; no exact representable decimal result”
[英]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)
。 只有在返回之后 ,才對其結果調用setScale(0, RoundingMode.UP)
。 如果該部門拋出異常,那么您以后打算做什么並不重要。
鑒於這些是數量,您可以考慮使用BigInteger
而不是BigDecimal
。
告訴BigDecimal
進行divide
時如何取整。 像這樣:
BigDecimal TotalPackageInt= cartQty.divide(cartMultiplier, 0, RoundingMode.UP );
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.