我参考了这一点,并对BigDecimal
值进行了四舍五入,然后我也得到了上述错误。请查找下面提到的代码。提前感谢:
BigDecimal val1 = new BigDecimal(494.10000001).setScale(8, BigDecimal.ROUND_UP);
BigDecimal val2 = new BigDecimal(693189.38625000).setScale(8, BigDecimal.ROUND_UP);
BigDecimal result = val1.divide(val2);
System.out.println(result);
请注意,除法有自己的可选舍入模式参数:
BigDecimal result=val1.divide(val2, BigDecimal.ROUND_UP);
答案就在那篇帖子里,并且多次提到:
a.divide(b, 8, RoundingMode.HALF_EVEN);
试试你的除法语句(你的精度是8)。你现在做的是除以两个大小数,这会得到一个超大的小数答案,你没有控制精度。
我以前用过大小数,但不太经常,今天早上我正在做一些事情,我一直得到以下例外: 我试图设置规模,并使用四舍五入来消除这样的问题: 然而,我一直得到同样的例外。有人能告诉我哪里出了错吗?
代码: 当我输入十进制值时,它抛出一个异常:线程“主”中的异常java.lang.算术异常:非终止十进制扩展;没有确切的可表示的十进制结果。
问题内容: 为什么以下代码会引发如下所示的异常? 例外: 问题答案: 从Java 11 BigDecimal文档: 当为对象提供的精度设置为0(例如MathContext.UNLIMITED)时,算术运算是精确的,不带对象的算术方法也是如此。(这是5之前的版本中唯一支持的行为。) 作为计算精确结果的必然结果,不使用精度设置为0 的对象的舍入模式设置,因此不相关。在除法的情况下,精确的商可以具有无限
为什么下面的代码会引发如下所示的异常? 例外情况:
我得到以下例外: 为什么会这样?除法的结果应该是729.75,它有一个终止的十进制扩展(.75)。
有没有办法防止对象自动将小数点向右移动两位? 此代码: 产生: 但是我希望它能产生: