调用在以下方法或属性(十进制和双精度,带舍入)之间不明确

本文关键字:双精度 舍入 不明确 之间 十进制 方法 属性 调用 | 更新日期: 2023-09-27 18:34:03

我的程序无法确定是作为decimal还是double执行Math.Round,但我不知道如何解决这个问题......这是我的代码,尽管倒数第二行是我关心的。

 ArrayList topp1 = new ArrayList();
 int toppcount = 0;
 foreach (Control cb in GroupBoxH1T.Controls)
 {
     CheckBox cb1 = cb as CheckBox;
     if (cb1.Checked == true)
     {
          toppcount++;
          topp1.Add(cb1.Text);
     }
  }
  if (cbhwchoice.Checked == false)
  {
      ArrayList topp2 = new ArrayList();
      foreach (Control cb in GroupBoxH2T.Controls)
      {
          CheckBox cb1 = cb as CheckBox;
          if (cb1.Checked == true)
          {
              toppcount++;
              topp2.Add(cb1.Text);
          }
      }
      toppcount = Math.Round((toppcount/2,MidpointRounding.AwayFromZero);
  }

调用在以下方法或属性(十进制和双精度,带舍入)之间不明确

Math.Round需要一个浮点数或十进制数,因为在整数上调用它不会有任何影响。 如果要调用它,请传入该类型的值。 为此,您只需将分子和分母转换为所需的类型即可。 例如:

decimal value = Convert.ToDecimal(toppcount) / 2.0M;
toppcount = Math.Round(value, MidpointRounding.AwayFromZero);

在倒数第二行

 toppcount = Math.Round((toppcount/2,MidpointRounding.AwayFromZero);

toppcount integer
2也是integer
所以toppcount/2会给你integer
作为示例1/2将为您提供0

试试Convert.ToDecimal(toppcount)/2.0(Decimal)toppcount/2.0

将 if 块的最后一个语句中的整数 2 替换为十进制 2.0。所以语句会变成这样:

toppcount = Math.Round((toppcount/2.0))