【不懂就问】Java 求多项式A(1/1+1/3+1/5+1/7+...)前1000项。 为什么按照我的代码,结果为1?

Java 求多项式A(1/1+1/3+1/5+1/7+...)前1000项。

为什么按照我的代码,结果为1?

附上代码:

public class Data20191205 {
    static double num,sum=0;
    public static void main(String []args) {
        for(int i=1;i<=1000;i++) {
            num = 1/(2*i-1);
            sum = sum + num;
        }
        System.out.println(sum);
    }
}

图片说明

问题出在这一句:num = 1/(2*i-1);

等号后面全是int类型,计算之后赋值给num时才会自动类型转换为double。
当i>1时,计算结果小于1大于0,在int类型下会舍弃小数位,结果是0.
所以赋值给num的也是0.

 num = 1/(2*i-1);

这里前后类型不一样
改为:

 num = (double)1/(2*i-1);

类型不对

for(int i=1;i<=1000;i++) {
    num = 1.0/(2*i-1);
    sum = sum + num;
}

就是类型不匹配,第一次为1的时候

for(double i=1;i<=1000;i++) {
num = 1/(2*i-1);
sum = sum + num;
}

for(int i=1;i<=1000;i++) {
num =1/Convert.ToDouble((2*i-1));
sum = sum + num;
}

for(int i=1;i<=1000;i++) {
num =1.0/(2*i-1);
sum = sum + num;
}

这样都可以, 两个int参与计算的结果会是int型的 ,
使其中一个数变成double类型计算结果就是正确的

你的 i 的数据类型设置错了,应该把 int 改为 double或者 float