意外的BigDecimal结果。 1除以3的结果1.不确定原因

时间:2013-01-07 18:56:45

标签: java bigdecimal rounding

  

可能重复:
  Addition for BigDecimal

我觉得我错过了一些明显的东西,但却无法弄清楚它是什么。我正在尝试使用BigDecimal来获取两个数字之间除法的小数部分。一个非常简单的情况,1.00除以3.00应为0.(3)重复。但是,我一直得到1.00的结果。

BigDecimal num = new BigDecimal(1.00).setScale(2);
BigDecimal divisor = new BigDecimal(3.00).setScale(2);

num.divide(divisor, BigDecimal.ROUND_HALF_UP);

System.out.print(num);

我的结果是1.00,我无法找出原因?

3 个答案:

答案 0 :(得分:14)

忽略num.divide的结果。您需要将其设置回变量

    BigDecimal num = new BigDecimal(1.00).setScale(2);
    BigDecimal divisor = new BigDecimal(3.00).setScale(2);

    BigDecimal result = num.divide(divisor, BigDecimal.ROUND_HALF_UP);

    System.out.print(result);

这会打印0.33

答案 1 :(得分:3)

BigDecimals是不可变的。您需要将结果分配给变量。

答案 2 :(得分:2)

num.divide不会更改num它会返回结果。

尝试:

num = num.divide(divisor, BigDecimal.ROUND_HALF_UP)