【问题标题】:Can't figure out this formula in c#在c#中无法计算出这个公式
【发布时间】:2012-12-18 08:17:01
【问题描述】:

抱歉,我是编码新手,尝试了所有方法后我无法弄清楚!我有 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# winforms for-loop formula generic-list


    【解决方案1】:

    你的 for 循环是问题...替换它

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

    【讨论】:

      【解决方案2】:

      改变

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          i 是一个整数,范围从 0 到 5。您将该整数除以 10,众所周知,整数除法没有分数,因此 i / 10 始终为 0。本质上,您的内心循环是这样的:

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

          这是 1。这就是为什么添加的结果是 6。

          你可能是这个意思:

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

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:
              added += Math.Pow(10, (i / 10));
              

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

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

              【讨论】:

                【解决方案7】:
                added += Math.Pow(10, (addDBList[i] / 10));
                

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-03-07
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-12-14
                  • 1970-01-01
                  相关资源
                  最近更新 更多