gpt4 book ai didi

java - 为什么在 Java 中两个 BigDecimal 数相除会抛出 ArithmeticException?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:44:55 25 4
gpt4 key购买 nike

让我们看看下面的 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));
}
}

在上面的代码片段中,除了最后一个(除法)之外的所有操作都被成功执行。尝试在 Java 中除以两个 BigDecimal 数字会抛出 java.lang.ArithmeticException。为什么?这个问题的解决方案是什么?

最佳答案

来自BigDecimal#divide(BigDecimal) documentation :

...if the exact quotient cannot be represented (because it has a non-terminating decimal expansion) an ArithmeticException is thrown.

在您的特定情况下,“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

关于java - 为什么在 Java 中两个 BigDecimal 数相除会抛出 ArithmeticException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10032911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com