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

C# 以下方法或属性之间的调用不明确(十进制和双精度,带舍入),c#,int,double,decimal,ambiguous,C#,Int,Double,Decimal,Ambiguous,我的程序无法确定是执行数学。四舍五入为十进制还是双精度,但我不知道如何解决这个问题。。。这是我的代码,虽然倒数第二行是我关心的 ArrayList topp1 = new ArrayList(); int toppcount = 0; foreach (Control cb in GroupBoxH1T.Controls) { CheckBox cb1 = cb as CheckBox; if (cb1.Checked == true) {

我的程序无法确定是执行数学。四舍五入为十进制还是双精度,但我不知道如何解决这个问题。。。这是我的代码,虽然倒数第二行是我关心的

 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);
  }
Round需要一个浮点数或十进制数,因为在整数上调用它不会有任何效果。如果要调用它,请传入该类型的值。为此,只需将分子和分母转换为所需类型。例如:

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

在最后一行的第二行

 toppcount = Math.Round((toppcount/2,MidpointRounding.AwayFromZero);
TopCount是整数 2也是整数 所以topCount/2将为您提供整数 例如,1/2将为您提供0

尝试Convert.ToDecimaltoppcount/2.0 或
DecimalTopCount/2.0

在if块的最后一条语句中将整数2替换为十进制2.0。因此,声明将变成这样:

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

只要执行以下操作,就可以将其缩短很多:toppcount=Math.Roundtoppcount/2m,MidpointRound.AwayFromZero;。2m会导致所有必要的转换。亲爱的Nattgs,因为bitoshi.n的答案是关于显式转换。我也面临同样的问题。我从比托什的回答中得到了主意。所以我想把它简单化,这样其他人会有更清晰的想法。