2012-03-07 4 views
2

Google 날씨 XML 파일을 사용하여 C#에서 기상 응용 프로그램을 개발 중이며 클래스 파일에서 계산을 사용하는 데 문제가 있습니다. 나는 folliowing 방법으로 섭씨를 화씨로 변환하려고 : 날씨 데이터가 가장 높은 온도 등이라고 곳두배에서 십진수로 변환

public static class Helper 
{ 
    public static decimal CalculateTemp(decimal input) 
    { 
    return Math.Round((input - 32) * 5/9/1.0) * 1.0 + "°C"; 
    } 
} 

는 "입력"입니다. 오늘의.

오류 23 : 내가 컴파일시 다음과 같은 오류가 점점 오전 인수 1 : 변환 할 수있는 최선의 오버로드 된 메서드 일치 'Weather.Helper.CalculateTemp (10 진수)'에 대한

오류 (24)을 일부 잘못된 인수가 에서 '소수'

오류 25 '더블'운영자 '/'내가이 문제를 해결하는 방법을 잘 모르겠습니다 형 '더블' '진수'와

의 피연산자에 적용 할 수 없습니다 ..

+3

제닝 코드를 쓰고, 1로 나누지 않고, 1을 곱하지 마십시오. 부동 소수점에 문자열을 추가하지 마십시오. 그러면 컴파일러에서 "아, 실제로 그게 의미하는 바입니다". –

답변

6

온도에 decimal을 사용하지 마십시오. double이면 충분합니다.

public static double CalculateTemp(double input) 
{ 
    return Math.Round((input - 32) * 5/9); 
} 
+1

사실입니다. 그리고 그는 정수로 반올림하기 때문에 부동 소수점이 전혀 필요하지 않습니다. 그러나 그의 질문은 어디서 오류가 발생 했는가라는 것이었고 오류 메시지는이 예제가 실제 프로그램의 단순화 된 사례라고 제안했기 때문에 실제로는 십진법이 필요합니다. –

+0

대단히 감사합니다! –

5

1.0double 아닌 decimal : 그것은 숫자가 아닌 문자열의 원인

또한, "°C"을 반환하지 않습니다. m 또는 M 접미사를 사용하여 숫자를 decimal으로 표시하십시오.

(input - 32) * 5M/9M 

(이 유형은 일반적으로 금융 거래에 사용되는 "M은"., "돈"의 약자) 및 소수점을 사용하려는 경우 당신도 * 1.0

0

필요하지 않습니다 (오히려 배 이상), 당신은 리팩토링해야 할 것 :

public static class Helper 
{ 
    public static string CalculateTemp(decimal input) 
    { 
     return Math.Round(((input - 32) * 5/9/1.0m)) + "°C"; 
    } 
} 

나 :

public static class Helper 
{ 
    public static string CalculateTemp(decimal input) 
    { 
     return Math.Round(((input - 32) * 5/9/(decimal)1.0)) + "°C"; 
    } 
} 

또한 마지막에 "°C"으로 인해 문자열을 반환하도록 메서드 서명을 변경해야한다는 점에 유의하십시오.

관련 문제