当前位置: 首页 > 知识库问答 >
问题:

为什么我已经在四舍五入了,却得到了一个非终止小数扩展?

皇甫逸清
2023-03-14

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

原因:java.lang.算术异常:非终止小数展开;没有确切的可表示的小数结果。

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

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

共有2个答案

洪季萌
2023-03-14

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

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

鉴于这些是量,您可以考虑使用Bigintger而不是BigDecimal

章稳
2023-03-14

告诉BigDecimal当你进行除法时,你想如何取整。这样地:

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

 类似资料:
  • 我试图将大的十进制值四舍五入到小数点后两位。 我正在使用 但它并没有始终如一地满足我的要求: 我不在乎有效数字,我只想要小数点后两位。我如何使用BigDecimal做到这一点?或者还有其他类/库更适合这个?

  • 问题内容: 如何将十进制数四舍五入为整数。 3.50 => 4 4.5 => 5 3.4 => 3 您如何用Java做到这一点?谢谢! 问题答案: 如果只使用正数,也可以使用int i =(int)(d + 0.5)。 编辑:如果您想将负数向上舍入(向正无穷大,例如-5.4变为-5),也可以使用它。如果要舍入到更高的值(将-5.4舍入为-6),建议您使用其他答案提出的其他功能。

  • 如果一个数字有精确的二进制表示,比如(十进制)0.5,难道不应该正确地四舍五入吗? 编辑:该问题发生在3.4.3版本中,但不发生在2.7.6版本中

  • 问题内容: 我已经在“ userInfo”类中实现了Serializable。我仍然感到异常。这是输出控制台- 这是我的两节课: 问题答案: 为什么我实现了’Serializable’却得到NotSerializableException异常 你还没有 java.io.NotSerializableException:chatservernazmus.User公共类userInfo实现了Seria

  • 问题内容: 如何将两个除数的结果取整,例如 和我一样 $ testOne应当将其舍入为“ 2”作为3/2 = 1.5的答案时包含“ 1” 问题答案: 要进行舍入运算,只需将其加到分子上即可。 例子,四舍五入: 例子,四舍五入: 要四舍五入,将其加到分子(一半将四舍五入):

  • 我如何四舍五入到两个小数位?