首页 > 解决方案 > 从小数数组中获取中值

问题描述

我需要从一组数字中计算出所有平均值(众数、平均值、中位数、范围)。

计算器正在接受输入NumericUpDown并将它们添加到 alistBox中,listBox 项目被添加到 a 中List<Decimal>(因为打印到标签似乎更容易)。

对于每种平均方法,列表都转换为一个,Array因为它似乎更容易计算。

不会撒谎,我什至不知道从哪里开始中位数......

我已经从 StackOverflow 上的各种解决方案中复制了一些代码,但它们都不起作用,因为它们不是为小数编写的,而且老实说,我不太了解代码。

添加号码

 //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 是不对的......

蒂亚!

标签: c#arraysmedian

解决方案


推荐阅读