总计不会打印成双倍

时间:2014-01-18 05:12:41

标签: c++ arrays pointers double cout

我找到一个数组的中间位置,但如果它是一组偶数数组,我必须找到两个中间数的平均值。我将变量初始化为double;但它仍然无法工作。我已经尝试过setprecision并且找到了正确的值。

void median (int *pScores, int numScores)
{
    insertionSort(pScores, numScores);

    int mid = 0;
    int midRight = 0;
    int midLeft = 0;
    double midEven;

    //if array is odd
    if (numScores % 2 != 0)
    {
        mid = numScores / 2;
        cout << "Middle Position: " << *(pScores + mid) << endl;
    }

    //if array is even
    if (numScores % 2 == 0)
    {
        midRight = (numScores/2);
        midLeft = (numScores/2) - 1;


        cout << *(pScores + midRight) << endl;
        cout << *(pScores + midLeft) << endl;

        midEven = ( *(pScores + midRight) + *(pScores + midLeft) ) / 2;
        cout << "Median: "<< setprecision(2) << midEven << endl;
    } 
}

我尝试将double midEven初始化为double midEven = 0;和double midEven = 0.0;我还没有得到小数点。

1 个答案:

答案 0 :(得分:1)

在C ++中,除以整数的整数仍然是整数(实际上任何带有两个整数的数学运算都会提供整数)。所以你应该首先将它们加倍:

midEven = static_cast<double>( *(pScores + midRight) + *(pScores + midLeft) ) / 2;

或将它们除以2.0,这是双倍的。

midEven = ( *(pScores + midRight) + *(pScores + midLeft) ) / 2.0;

然而,两种方法都存在潜在问题,即两个分数的总和可能超过整数的极限。因此,如果您认为可能会发生这种情况,那么更谨慎的方法是:

midEven = ( static_cast<double>(pScores[midRight]) + static_cast<double>(pScores[midLeft]) ) / 2;