大十进制错误

  • 本文关键字:错误 十进制 java
  • 更新时间 :
  • 英文 :


有人可以说我问题在哪里?

double interval;
         BigDecimal diff = BigDecimal.valueOf(17);
         int n=39;
         BigDecimal N = BigDecimal.valueOf(n);
         interval = diff.divide(N).doubleValue();//line26
         System.out.println(interval);

我有这个错误

Exception in thread "main" java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result.
    at java.math.BigDecimal.divide(BigDecimal.java:1603)
    at newlogoot.class.main(class.java:26)
Java Result: 1

问题是除法的结果是一个非终止的十进制数,它不能按原样在BigDecimal中完全表示(因为这需要无限量的内存)。

因此,您需要使用BigDecimal.divide的两(或三)参数版本来限制其十进制数字的数量,例如

     interval = diff.divide(N, 3, RoundingMode.HALF_DOWN).doubleValue();//line26

(这会将结果舍入为 3 个十进制数字。

相关内容

  • 没有找到相关文章