我不明白为什么当我在main(Serie(1),Serie(n))中使用该函数时,它会一直显示结果“1”,尽管它是一个双精度值。
double Serie(int n)
{
double sum = 0;
for(int i = 1 ; i <= n ; i++)
{
sum = sum + (1/i);
}
return sum;
}
答案 0 :(得分:4)
如前所述,您在表达式1/i
中使用整数除法,因此i > 1
的结果为0。一个简单的解决方案是改变:
sum = sum + (1/i);
为:
sum = sum + 1.0 / i;
或者可能更简洁:
sum += 1.0 / i;
答案 1 :(得分:3)
(1/i)
不是double
值。 1
是整数文字,i
是int
,因此1/i
执行整数除法。
当double
类型sum
出现时,对你来说已经太晚了。
答案 2 :(得分:0)
表达式(1/i)
是整数除法。第一次通过它评估为(1/1)
给你1.当你将它添加到sum
时,将有一个整数提升加倍。
但是,在随后的所有场合(例如(1/2)
,(1/3)
等),您的整数除法将产生0
。然后,您将整数提升为double,并将其添加到sum
,但不会更改它。
要解决此问题,请说(1/(double)i)
或(1.0/i)
以强制该部门产生double
。
答案 3 :(得分:0)
由于您的操作(1 / i)包含两个值为整数(在这种情况下,i是整数)。表达式的这一部分导致整数结果。在这种情况下,小数会被截断。
要获得双重结果,您可以将1或i转换为双倍。