Java:为什么这个BigDecimal循环不起作用?

时间:2015-05-10 19:06:54

标签: java decimal bigdecimal pi

我正在尝试使用Gregory-Leibniz方法计算pi到用户指定的小数位数。我以前从未和BigDecimal课一起工作过,所以我不知道我在这里缺少什么。

可以找到Leibniz方法的简单解释here(方法3)。

实际上,它从分数4 / n开始,其中n = 1,并且在减去和加上分数4 / n之间交替,在每次迭代时将n递增到下一个奇数。

无论指定多少个小数位,程序都只输出5

我的代码:

public static void calculatePi(int decimals) {
    BigDecimal pi = new BigDecimal(0.0);
    pi.setScale(decimals); // Set how many decimal points to use.
    boolean plus = true; // Add on the next iteration?
    int denominator = 1;
    BigDecimal nextVal = new BigDecimal((4/denominator));

    for(int i=0; i<decimals; i++)
    {
        if(plus == true) {
            pi = pi.add(nextVal);
        } else {
            pi = pi.subtract(nextVal);
        }
        denominator += 2;
        nextVal = new BigDecimal(4/denominator);
        plus ^= false; // Flip value of plus each iteration
    }
    System.out.println(pi.toPlainString());
}

0 个答案:

没有答案