Java - 计算圆周率

Java - Calculating Pi

一直想用格雷戈里-莱布尼茨级数来计算圆周率,结果出了点问题。我是 Java 的新手,所以这可能不是一个很难回答的问题。我不知道发生了什么,所以有人可以帮助我吗?

到目前为止的代码:

package com.waitdev.pi;

public class Pi {

    static int pi = 0;

    public static void main(String[] args) {

        for (int i = 1; i < 51; i++) {

            if (isOdd(i)) {
                pi = pi+(4/((i*2)-1));
                // System.out.println(i);
            } else {
                pi = pi-(4/(i*2)-1);
                // System.out.println(i);
            }
        }

        System.out.println(pi);
    }

    private static boolean isOdd(int n) {
        if (n % 2 == 1) {
            return true;
        } else {
            return false;
        }
    }
}

仅供参考:此输出为 28。

谢谢。

您在 else 块中缺少括号,您需要通过例如写 4.0 而不是 4 来强制进行浮点计算。 它应该是:

if (isOdd(i)) {
    pi = pi+(4.0/((i*2)-1));
    // System.out.println(i);
} else {
    pi = pi-(4.0/((i*2)-1));
    // System.out.println(i);
}

您还需要为 pi 使用 floatdouble

额外 - 至于你的 isOdd 方法,它可以简化为:

private static boolean isOdd(int n) {
     return (n % 2 == 1)
}

但这并不影响结果。

首先:int 是一个整数,整数。你想把它改成:

static double pi = 0;

否则答案总是四舍五入为整数。

其次,您的 else 语句中缺少括号:

} else {
    pi = pi-(4/((i*2)-1));
}

如果您想完全安全,请将 if 和 else 子句中的整数更改为双精度数:

            if (isOdd(i)) {
                pi = pi+(4.0/((i*2.0)-1.0));
                // System.out.println(i);
            } else {
                pi = pi-(4.0/((i*2.0)-1.0));
                // System.out.println(i);
            }

但这不是必需的