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