使用BigDecimal计算PI

时间:2014-09-21 23:01:28

标签: java bigdecimal pi

这是我第一次使用BigDecimal而且我遇到了一些麻烦。

这是我的代码:

import java.math.BigDecimal;

public class Test {
    public static void main(String[] args) {
        BigDecimal pi = new BigDecimal(4);
        boolean plus = false;
        for (int i = 3; i < 1000000; i += 2) {
            if (plus) {
                pi.add(new BigDecimal(4).divide(new BigDecimal(i), 2, BigDecimal.ROUND_HALF_UP));
            } else {
                pi.subtract(new BigDecimal(4).divide(new BigDecimal(i), 2, BigDecimal.ROUND_HALF_UP));
            }
            plus = !plus;
        }
        System.out.println(pi);
    }
}

为什么它不像它应该那样计算PI,而是它给我和4的答案?

1 个答案:

答案 0 :(得分:3)

你永远不会改变pi。请记住,BigDecimals是不可变的,你永远不会改变你的,即你永远不会将它分配给一个新值,所以你必须有一个地方

pi = ...

在你的if / else里面是个好地方。

if (plus) {
    pi = pi.add(new BigDecimal(4).divide(new BigDecimal(i), 2, BigDecimal.ROUND_HALF_UP));
} else {
    pi = pi.subtract(new BigDecimal(4).divide(new BigDecimal(i), 2, BigDecimal.ROUND_HALF_UP));
}

来自BigDecimal API

的第一行
  

不可变,任意精度的有符号十进制数。

我也会将2的比例改为更好的状态。