为什么我的代码总是返回1?

时间:2015-11-20 13:36:04

标签: java math

    double formula1, formula2;
    int plus;
    int VALUE = 10000;    



  private void processFormula2()
    {
        for (int k = 0; k <= VALUE; k++) {
            if (k % 2 != 0) {
                if (plus % 2 == 0) {
                    double math = 1/k;
                    formula2 += math;
                    System.out.println("Getting Formula: "+ formula2);
                    plus++;
                } else {
                    formula2 -= 1/k;
                    plus++;
                }
               // System.out.println("Term: " + formula2);
            }
        }

    }

我正试图让我的公式根据我老师给我们的这个公式打印出Pi的结果。但由于某种原因,它只返回1.0,不确定为什么。任何帮助或建议将不胜感激:)

2 个答案:

答案 0 :(得分:3)

问题在于:

double math = 1/k;

formula2 -= 1/k;

kint变量,因此JVM不会在此语句中返回十进制数。它只需要两个可能的值:0(如果k> 1)或1(如果k == 1),因为JVM在之前执行除法将结果提升为double。< / p>

试试这个:

formula2 -= 1/(double)k;

查看Numeric Promotions

答案 1 :(得分:1)

首先,变量声明存在多个错误。

由于如何处理整数除法,

double math = 1/k;将无法在Java中真正起作用。你必须要么施放&#39; 1&#39;到double math = (double)1/k;之类的双精度型,或者使用double math = 1.0/k;指定使用混合模式算术。这也是您的formula2变量的问题(除此之外,您应始终初始化变量,如formula1formula2plus)。您还必须使用formula2 -= 1/k;执行相同的操作。

其次,我们不知道您首先将这些变量设置为什么,我们也没有任何测试用例可供比较。