2012-05-13 5 views
0

decimal 또는 double으로 실행할지 여부를 프로그램에서 결정할 수는 없지만이를 해결하는 방법은 없습니다. 내 코드, 마지막 두 번째 라인은 내가 염려하는 것입니다. 정수에를 호출하면 아무런 영향을 미치지 않기 때문에다음 메서드 또는 속성 사이에 모호한 호출이 있습니다 (반올림하여 소수 및 이중)

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는 부동 소수점 또는 10 진수 숫자를 기대하고있다. 전화를 걸려면 해당 유형의 값을 전달하십시오. 이렇게하려면 분자와 분모를 원하는 형식으로 변환하면됩니다. 예를 들어 :

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

입니다,210

(Decimal)toppcount/2.0

0

이 경우 블록의 마지막 문에서 소수점 2.0 정수 2를 교체 Convert.ToDecimal(toppcount)/2.0 또는 을 시도해보십시오. 그러면 성명은 다음과 같이됩니다 :

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

5 년 후에 이미 답변 된 질문에 대답하는 이유는 무엇입니까? – NatNgs

+0

NatNgs님께, bitoshi.n의 답변이 명시적인 전환에 대한 이야기이기 때문에. 나는 또한 같은 문제에 직면했다. 나는 bitoshi.n의 대답에서 아이디어를 얻었다. 그래서 나는 다른 사람들이 더 명확한 생각을 갖도록 간단하게 생각했습니다. –