好的,所以我试图除以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);
您理解操作的意图这一事实并不会改变实际Java方法链的语义。
您的语句以cartQty
开头,然后对其调用divide(cartpriplier)
。只有在返回后,才会对其结果调用setScale(0,RoundingMode.UP)
。如果部门抛出了一个异常,那么你以后打算做什么并不重要。
鉴于这些是量,您可以考虑使用Bigintger
而不是BigDecimal
。
告诉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” 问题答案: 要进行舍入运算,只需将其加到分子上即可。 例子,四舍五入: 例子,四舍五入: 要四舍五入,将其加到分子(一半将四舍五入):
我如何四舍五入到两个小数位?