首页 > 解决方案 > 当 BigDecimal 类型先除法再乘法时,为什么结果与预期不同。JAVA

问题描述

问题:当使用 BigDecimal 进行涉及除法的多次计算时。用小数很难理解。

例如:

1/3*3

我们期望是 1

但是当你使用 BigDecimal 时。

我们得到算术异常

如果我为除法添加 roundingMode 。

我们得到 0.9999999999999

float result1 = 1f / 3f * 3f;
BigDecimal one = BigDecimal.valueOf(1);
BigDecimal three = BigDecimal.valueOf(3);
BigDecimal result2 = one.divide(three,64,BigDecimal.ROUND_HALF_UP).multiply(three);

System.out.println(result1);
System.out.println(result2);

输出

1.0
0.9999999999999999999999999999999999999999999999999999999999999999

我知道这个问题与舍入模式有关,但我不知道如何解决这个问题

如果您能帮助提出解决方案,非常感谢。

ps:我的英文不好,应该能看出来,sorry :)

标签: javabigdecimaldivide

解决方案


推荐阅读