我正在尝试使用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());
}