【问题标题】:Error while dividing BigDecimal value : java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result [duplicate]划分 BigDecimal 值时出错:java.lang.ArithmeticException:非终止十进制扩展;没有精确可表示的十进制结果[重复]
【发布时间】:2018-07-28 02:46:36
【问题描述】:

我参考了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);

【问题讨论】:

  • 尝试 BigDecimal 结果=val1.divide(val2,8,RoundingMode.HALF_UP);
  • 你链接的帖子提到了a.divide(b, 2, RoundingMode.HALF_UP),但这不是你在做什么,所以我倾向于说这只是一个重复,或者是一个印刷错误。

标签: java bigdecimal


【解决方案1】:

答案就在那篇文章中,并且还多次声明:

a.divide(b, 8, RoundingMode.HALF_EVEN);

为您的除法语句尝试此方法(精度为 8)。 你现在正在做的是将两个大小数相除,这会产生一个超大的小数答案,而且你没有控制精度。

【讨论】:

    【解决方案2】:

    请注意,divide 方法有自己的可选舍入模式参数:

    BigDecimal result=val1.divide(val2, BigDecimal.ROUND_UP);
    

    【讨论】:

      猜你喜欢
      • 2019-05-19
      • 2016-10-21
      • 1970-01-01
      • 2021-10-26
      • 1970-01-01
      • 2014-10-12
      • 1970-01-01
      相关资源
      最近更新 更多