Java BigDecimal DivideAndremainderdr thr thing distrive不可能的例



查看此代码。它适用于像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));
  }
}

我正在使用JDK11。

错误:

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的文档?

它说:

抛出 arithmeticexception 如果结果不确切,但圆形模式不必要,或者mc.precision> 0 and and this.dividetetointgralvalue(divisor)的精度超过精度超过精度。MC.Precision Digits。

因此,int scale = 2;不够用于此操作,如果将其更改为 int scale = 3;,它可以很好地工作。

705/5 == 141,而141不能表示为2位数字。

文档说:

如果确切商的整数部分不仅需要精确数字,

算术算法是抛弃的。

(温和释义)

您需要更精确。当scale为3。

时,它可以工作

704可能是因为整数部分 can 表示为两个数字: 1.4E+2

最新更新