不能用c#算出这个公式

本文关键字:不能 | 更新日期: 2023-09-27 17:50:40

对不起,我是新来的编码和我不能弄清楚后,尝试一切!我有6个遮罩文本框,用户输入分贝值,应该将它们保存到列表中,将每个输入到公式中并输出求和分贝值,但它只是简单地将变量添加为6,这是列表的计数,而不是实际值。当我尝试foreach循环时,它使它成为一个无限循环。

private void dBAddButton_Click(object sender, EventArgs e)
    {         
        List<double> addDBList = new List<double>();
        double final;
        double added = 0;
        addDBList.Add(double.Parse((dB1.Text)));
        addDBList.Add(double.Parse((dB2.Text)));
        addDBList.Add(double.Parse((dB3.Text)));
        addDBList.Add(double.Parse((dB4.Text)));
        addDBList.Add(double.Parse((dB5.Text)));
        addDBList.Add(double.Parse((dB6.Text))); 
            for (int i = 0; i < addDBList.Count; i++)
           {
            added += Math.Pow(10, (i / 10));
           }
        final = 10 * Math.Log10(added);
        totaldB.Text = final.ToString();                  
    }

}

公式基本是10log[10^(first value/10)+10^(second value/10)...+10^(nth value/10)]

不能用c#算出这个公式

added += Math.Pow(10, (i / 10));

这是你的问题。i是数组的索引位置,而不是实际值。你想用这个:

added += Math.Pow(10, (addDBList[i] / 10));
added += Math.Pow(10, (addDBList[i] / 10));

i为整数,取值范围为0 ~ 5。你把这个整数除以10,我们都知道,整数除法没有分数,所以i/10总是0。本质上,你的内部循环是这样的:

added += Math.Pow(10, 0);

等于1。这就是为什么add最后是6。

你的意思可能是:

added += Math.Pow(10, addDBList[i] / 10);

您可以(并且应该)使用这样的foreach:

foreach (double decibel in addDBList)
{
   added += Math.Pow(10, (decibel / 10));
}

要访问数组或列表中的值,必须使用索引和标识符:

added += Math.Pow(10, (addDBList[i] / 10));

变化

added += Math.Pow(10, (i / 10));

added += Math.Pow(10, addDBList[i] / 10);

你的for循环是问题…用

代替
 for (int i = 0; i < addDBList.Count; i++)
       {
        added += Math.Pow(10, ( addDBList[i] / 10));
       }