Java双神秘舍入

Tob*_*oby -1 java double integer rounding

我有这个代码:

package picalculator;

//import java.util.Scanner;

public class PiCalculator {

static int odd=1;

public static void main(String[] args) {

    calculatePi();

}
public static void calculatePi() {
    int counter=0;
    double pi=4.0;

    int num[];

    num = new int[20];

    num[0] = generateOdd();
    num[1] = generateOdd();
    num[2] = generateOdd();
    num[3] = generateOdd();
    num[4] = generateOdd();
    num[5] = generateOdd();
    num[6] = generateOdd();
    num[7] = generateOdd();
    num[8] = generateOdd();
    num[9] = generateOdd();
    num[10] = generateOdd();
    num[11] = generateOdd();
    num[12] = generateOdd();
    num[13] = generateOdd();
    num[14] = generateOdd();
    num[15] = generateOdd();
    num[16] = generateOdd();
    num[17] = generateOdd();
    num[18] = generateOdd();
    num[19] = generateOdd();

    for (int i=0;i<20;i++) {
        if(counter == 0) {
            pi -= 4/num[i];
            counter++;
        }else {
            pi += 4/num[i];
            counter--;
        }
    }

    System.out.print(pi);

    return;
}
public static int generateOdd() {
    odd += 2;
    return odd;
}

}
Run Code Online (Sandbox Code Playgroud)

并且出于某种原因它返回"3.0",即使它应该返回更像"3.158 ......"的东西

似乎double正在向下舍入为整数后面带有".0".有没有人有关于如何解决这个问题的想法?提前致谢!

Ern*_*ill 8

因为4/num[i]完全由整数组成的表达式是使用整数数学计算的,并且总是给出整数结果.如果4是a 4.0,则表达式将使用double,并且您将获得预期结果.