Получить среднее значение из массива десятичных дробей - PullRequest
0 голосов
/ 09 февраля 2019

Мне нужно вычислить все средние (режим, среднее, медиана, диапазон) из массива чисел.

Калькулятор берет входные данные с NumericUpDown и добавляет их к listBox, Элементы listBox добавляются к List<Decimal> (потому что печать на этикетке кажется проще).

Для каждого метода усреднения список преобразуется в Array, потому что кажется, что его легче вычислить.

Не буду лгать, я даже не знаю, с чего начать с медианы ...

Я скопировал несколько кодовых форм различных решений в StackOverflow и что нет, но ни одно из них не работаетпотому что они не были написаны для десятичных знаков и слишком честно, я не совсем понимаю код.

AddNumbers

 //Add number to list and retun to 0.
    private void btnAddNums_Click(object sender, EventArgs e)
    {
        //Add selcted item from listbox
        listBoxNumbers.Items.Add(numUpDownAvg.Value);

        //Create new instance of listNumbers
        List<Decimal> listNumbers = new List<Decimal>();

        //for each decimal in listbox...
        foreach (Decimal listItems in listBoxNumbers.Items)
        {
            //Add to listNumbers
            listNumbers.Add(listItems);
            numUpDownAvg.Value = 0;
        }

        //iterate though list printing each item seperate by a comma
        for (int i = 0; i < listNumbers.Count; i++)
        {
            txtBoxNumbers.Text = (String.Join(",", listNumbers));

        }

        //print list to console 
        Console.WriteLine(String.Join(",", listNumbers));
    }

Медиана

    //This button prints median to results
    private void btnMedian_Click(object sender, EventArgs e)
    {

        //Create new instance of listNumbers
        List<Decimal> listNumbers = new List<Decimal>();

        //for each decimal in listbox...
        foreach (Decimal listItems in listBoxNumbers.Items)
        {
            //Add to listNumbers
            listNumbers.Add(listItems);

        }

        //Convert list to array 
        decimal[] listArrayofNumbers = listNumbers.ToArray();

        Array.Sort(listArrayofNumbers);

        var n = listArrayofNumbers.Length;

        decimal median;

        var isOdd = n % 2 != 0;
        if (isOdd)
        {
            median = listArrayofNumbers[(n + 1) / 2 - 1];
        }
        else
        {
            median = Convert.ToDecimal(listArrayofNumbers[n / 2 - 1] + listArrayofNumbers[n / 2]) / 2.0d;
        }

       // Console.WriteLine(median);

    }

}

ошибка median = Convert.ToDecimal(listArrayofNumbers[n / 2 - 1] + listArrayofNumbers[n / 2]) / 2.0d;

Ошибка говорит "Оператор" / "нельзя использовать с типом десятичный или двойной"

, предполагая, что мне нужно где-то привести к десятичному числу?Очевидно, что Convert.ToDecimal не прав ...

TIA!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...