双显示int值

时间:2015-03-09 10:18:19

标签: c++ double

我不明白为什么当我在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;
}

4 个答案:

答案 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是整数文字,iint,因此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转换为双倍。

相关问题