Java BigDecimal divergeAndRemainder 抛出除法不可能异常

标签 java bigdecimal

查看此代码。它适用于像 704 这样的数字,但从 705 开始出现除法不可能错误:

import java.math.*;

public class Test {
  public static void main(String[] argv) throws Exception {
    BigDecimal totalDuration = new BigDecimal(705);

    int scale = 2;
    MathContext mc = new MathContext(scale, RoundingMode.HALF_UP);
    System.out.println(totalDuration.divideAndRemainder(new BigDecimal(5), mc));
  }
}

我使用的是 JDK 11。

抛出错误:

Exception in thread "main" java.lang.ArithmeticException: Division impossible
    at java.base/java.math.BigDecimal.divideToIntegralValue(BigDecimal.java:1880)
    at java.base/java.math.BigDecimal.divideAndRemainder(BigDecimal.java:2012)
    at Test.main(Test.java:9)

最佳答案

您检查过 BigDecimal.divideAndRemainder 的文档吗?

它说:

throws ArithmeticException if the result is inexact but the rounding mode is UNNECESSARY, or mc.precision > 0 and the result of this.divideToIntgralValue(divisor) would require a precision of more than mc.precision digits.

所以int scale = 2;对于这个操作来说是不够的,如果你把它改为int scale = 3;,它就可以很好地工作。

关于Java BigDecimal divergeAndRemainder 抛出除法不可能异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55212584/

相关文章:

java - 过滤MySQL数据到JTable

java - 通过gson将复杂的json对象转换为java对象

java - 大十进制类中的意外输出,java

java - 计算指数增长系列中的值之和

java - Vaadin、Jetty、Spring Data、Maven - 异常

java - 从文件中读取俄语字符(javaSE)

java - 使用 Scanner 循环

java - 无法在 Java 中将 bigdecimal 转换为字符串

java - BigDecimal 到 Java/Android 上 BigDecimal 的强大功能

java - 将 float 转换为数据类型 numeric 的算术溢出错误