除 BigDecimal 值时出错:java.lang.ArithmeticException:非终止小数扩展;没有精确可表示的十进制结果
Error while dividing BigDecimal value : java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result
我参考了 this 并对 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);
答案就在那post,而且还说了很多次:
a.divide(b, 8, RoundingMode.HALF_EVEN);
为你的除法语句试试这个,(为了你的精度,比例是 8)。
你现在正在做的是除以两个大的小数,结果是一个超大的小数答案,而你没有控制精度。
请注意 divide 方法有其自己的可选舍入模式参数:
BigDecimal result=val1.divide(val2, BigDecimal.ROUND_UP);
我参考了 this 并对 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);
答案就在那post,而且还说了很多次:
a.divide(b, 8, RoundingMode.HALF_EVEN);
为你的除法语句试试这个,(为了你的精度,比例是 8)。 你现在正在做的是除以两个大的小数,结果是一个超大的小数答案,而你没有控制精度。
请注意 divide 方法有其自己的可选舍入模式参数:
BigDecimal result=val1.divide(val2, BigDecimal.ROUND_UP);