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