总共无法打印为双重

Total wont print as a double

本文关键字:打印      更新时间:2023-10-16

im找到数组的中间位置,但是如果它是一组阵列,则必须找到两个中间数的平均值。我的变量初始化为双重;但这仍然行不通。我尝试了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;
    } 
}

我尝试将双mideven初始化为双mideven = 0;和双mideven = 0.0;而且我仍然没有小数点。

在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;