BigDecimal除法和近似,无0.01差异

时间:2018-12-15 23:17:33

标签: java

我正面临一个新问题。.我使用BigDecimal进行资金投入。 有一个小问题。让我们看一下这段代码:

BigDecimal a = BigDecimal.valueOf(5);
BigDecimal b = BigDecimal.valueOf(3);
BigDecimal result = a.divide(b);

结果是:

1.67

但如果我这样做:

1.67 * 3 = 5.01

这就是我的代码中的问题。所以我需要精确得到5。所以5/3应该是1.67 + 1.67 + 1.66。 有可能实现吗?

1 个答案:

答案 0 :(得分:3)

如果执行该代码段,则会出现以下异常,如live code at IdeOne.com所示。

java.lang.ArithmeticException: Non-terminating decimal expansion; no exact representable decimal result

看看另一个线程:

ArithmeticException thrown during BigDecimal.divide

您可以告诉BigDecimal如何处理重复的小数。

如果您改为执行以下操作:

    BigDecimal a = BigDecimal.valueOf(500, 2);
    BigDecimal b = BigDecimal.valueOf(300, 2);
    BigDecimal result = a.divide(b, BigDecimal.ROUND_HALF_UP);
    System.out.println(result);

那么您确实会有1.67

的结果

关于如何实现1.67 + 1.67 + 1.66 AFAIK的问题,您需要自己解决。