簡體   English   中英

為什么我已經四舍五入了,為什么我得到一個不終止的十進制擴展?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM