Всего не будет печататься как двойной

0

Я нахожу среднюю позицию массива, но если это четный набор массивов, я должен найти среднее из двух средних чисел. Я имею переменную, инициализированную как 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; и я все еще не получаю десятичную точку.

Теги:
arrays
pointers
double
cout

1 ответ

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;
  • 1
    +1. О "более осторожном" способе: достаточно было бы привести только одно из двух целых чисел к double .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню