2012-05-13 1 views
0

decimalまたはdoubleとして実行するかどうかをプログラムで判断できませんが、これを修正する方法はわかりません。私のコードですが、最後の2行目は私の心配です。以下のメソッドまたはプロパティ間で呼び出しが曖昧である(小数点および二重丸め)

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); 
    } 

答えて

6

Math.Round整数でそれを呼び出すことは効果がないだろうので、浮動小数点または小数を期待しています。それを呼び出す場合は、その型の値を渡します。これを行うには、分子と分母を単純に目的の型にキャストします。たとえば、次のように

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

面白い、ありがとう! – Wilson

+1

'toppcount = Math.Round(toppcount/2m、MidpointRound.AwayFromZero);'とするだけで、これを大幅に短縮することができます。 '2m'は全ての必要なキャストを引き起こします。 – SimpleVar

1

最後から二番目の行で

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

toppcountinteger
2integer
例として1/2はあなたを与えるのでtoppcount/2はあなたinteger
を与える0

です

Convert.ToDecimal(toppcount)/2.0 または (Decimal)toppcount/2.0

0

かのブロックの最後の文で、小数点2.0で整数2を交換してみてください。したがって、この声明は次のようになります:

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

5年後に既に回答した質問にはなぜ答えるのですか? – NatNgs

+0

bitoshi.nからの回答が明示的な変換について話しているので、NatNgsさんに。私も同じ問題に直面しました。私はbitoshi.nの答えから考えを得た。だから私は他の人がより明確なアイデアを得るように単純にすることを考えました。 –

関連する問題