Java - 计算Pi

时间:2016-03-18 08:59:43

标签: java pi

我一直想用Gregory-Leibniz系列计算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。

感谢。

2 个答案:

答案 0 :(得分:5)

你在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);
}

您还需要float使用doublepi

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

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

但这不会影响结果。

答案 1 :(得分:0)

首先关闭:int是整数,整数。你想把它改成:

static double pi = 0;

否则答案总是向下舍入到整数。

其次,你在else语句中缺少括号:

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

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

            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);
            }

但这不应该是必要的