我们来看看Java中的以下代码片段.
package division;
import java.math.BigDecimal;
final public class Main
{
public static void main(String[] args)
{
BigDecimal a = new BigDecimal(2);
BigDecimal b = new BigDecimal(3);
System.out.println(a.multiply(b));
System.out.println(a.add(b));
System.out.println(b.subtract(a));
System.out.println(a.divide(b));
}
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码片段中,除最后一个(除法)之外的所有操作都成功执行.试图BigDecimal在Java中划分两个数字会引发争议java.lang.ArithmeticException.为什么?这个问题的解决方案是什么?
mae*_*ics 14
从BigDecimal#divide(BigDecimal)文档:
...如果无法表示确切的商(因为它具有非终止的十进制扩展),则抛出ArithmeticException.
在您的特定情况下,"2/3"具有非终止十进制扩展(0.6666 ...),因此您必须使用一种形式,divide()其中采用比例和/或RoundingMode解析无限表示.例如:
BigDecimal a = new BigDecimal(2);
BigDecimal b = new BigDecimal(3);
a.divide(b, 4, RoundingMode.CEILING); // => 0.6667
a.divide(b, 4, RoundingMode.FLOOR); // => 0.6666
Run Code Online (Sandbox Code Playgroud)