C#WPF制定7天移动平均线

C#WPF制定7天移动平均线,c#,wpf,datagrid,C#,Wpf,Datagrid,嘿,我正试图建立一个7天移动平均线,但我不知道该怎么做。我现在拥有的是用户在数据网格中输入值,然后在输入7个数字后,他们得到这些数字的平均值(数字总和/7)。我已经设法实现了,但我想有一个移动平均值,这样当他们输入8或第9个值时,他们会得到最后7个值的新平均值。我不确定我将如何实施这一点。因此,它现在的工作原理是用户通过在名为“AddWeightToGrid”的文本框中键入值,将值输入到DataGrid中,然后值进入名为“gridListValues”的ObservableCollections

嘿,我正试图建立一个7天移动平均线,但我不知道该怎么做。我现在拥有的是用户在数据网格中输入值,然后在输入7个数字后,他们得到这些数字的平均值(数字总和/7)。我已经设法实现了,但我想有一个移动平均值,这样当他们输入8或第9个值时,他们会得到最后7个值的新平均值。我不确定我将如何实施这一点。因此,它现在的工作原理是用户通过在名为“AddWeightToGrid”的文本框中键入值,将值输入到DataGrid中,然后值进入名为“gridListValues”的ObservableCollectionsList,这就是DataGrids项源(DataGrid称为“WeightDataGrid”)。以下是目前7天平均值的计算结果:

    private void AddWeightToGridButton_Click(object sender, RoutedEventArgs e)
    {
        if (gridListValues.Count <= 5)
            gridListValues.Add(new WeightGridValues { Weight = AddWeightToGrid.Text, Date = Convert.ToString(AddDateToGrid) });

        else if (gridListValues.Count >= 6)
        {
            gridListValues.Add(new WeightGridValues { Weight = AddWeightToGrid.Text, Date = Convert.ToString(AddDateToGrid), SevenDayWeightAverage = SevenDayAverageCalc(averageWeight) });                
        }
    }


     private string SevenDayAverageCalc(WeightGridValues averageWeight)
     {

        decimal sevenDayCalc = 0;
        for (int i = 0; i < gridListValues.Count; i++)
        {
            sevenDayCalc += Convert.ToDecimal(gridListValues[i].Weight);                
        }
        sevenDayCalc += Convert.ToDecimal(AddWeightToGrid.Text);
        sevenDayCalc = sevenDayCalc / 7;
        
        return averageWeight.SevenDayWeightAverage = Convert.ToString(sevenDayCalc);           

     }
private void AddWeightToGridButton\u单击(对象发送方,路由目标)
{
如果(gridListValues.Count=6)
{
添加(新权重GridValues{Weight=AddWeightToGrid.Text,Date=Convert.ToString(AddDateToGrid),SevenDayWeightAverage=SevenDayAverageCalc(averageWeight)});
}
}
私有字符串SevenDayAverageCalc(WeightGridValues averageWeight)
{
十进制七天计算=0;
for(int i=0;i

我希望我能很好地解释我的问题是什么,我想实现什么。如果我没有,请让我澄清。感谢您的帮助,谢谢

我认为@jdweng的答案是正确的,但可能需要对@sharpus做一点解释,因为他/她是“编程新手”

让我试着用一种更基本的方式来解释。SevenDayAverageCalc()正在尝试逐个遍历gridListValues,获取总和,然后除以7。当且仅当gridListValues有7个元素时,此操作才有效。如果有7个以上的元素,则需要跳过前面的几个元素,只使用最后7个元素。所以你可以这样做:

for (int i = gridListValues.count -7; i < gridListValues.count; i++)
{
    sevenDayCalc += Convert.ToDecimal(gridListValues[i].Weight);                
}
sevenDayCalc += Convert.ToDecimal(AddWeightToGrid.Text);
sevenDayCalc = sevenDayCalc / 7;
for(int i=gridListValues.count-7;i

这实际上就是@jdweng的一行代码所做的:跳过前几行以达到[gridListValues.count-7],然后平均其余元素的权重。您可能希望签出Skip and Average

最佳方法是在列表中获得七个项目时,从对象中删除项目零。这可能会起作用,但如果有意义,我希望将所有值保存在网格中。(常规值和平均值)这样做似乎很复杂。获取列表的长度并平均最后7个。如果长度为10,则可以跳过前三个。跳过(gridListValues.Count-7)。平均(x=>x.Weight);谢谢我忘了说我是编程新手,所以我不太明白=>是什么东西。我意识到这个项目对我现在的技能水平来说可能有点太高了。也许最好暂时搁置一下,直到我好转为止。但是谢谢你的帮助!