2016-10-21 1 views
-1

의 평균을 계산합니다 :기능은 내가 쓴 두 개의 정수

public static decimal Average(int a, int b) 
    { 
     return (a + b)/2; 
    } 

    public static void Main(string[] args) 
    { 
     Console.WriteLine(Average(2, 1)); 
     Console.ReadKey(); 
    } 

하지만 1를 반환합니다. 하지만 반환해야합니다 1.5 1.5를 반환하도록 수정하려면 어떻게해야합니까?

+2

사용하기 때문에 INT – Alexan

+0

http://stackoverflow.com/questions/1043164/why-does-decimal- divideint-int-work-but-not-int-int –

답변

2

평균 기능

public static decimal Average(int a, int b) 
{ 
    return (decimal)(a + b)/2; 
} 

public static void Main(string[] args) 
{ 
    Console.WriteLine(Average(2, 1)); 

} 
+3

이것이 맞습니다. 그러나 그것이 올바른 이유를 설명합니다 : 정수 나누기에서 3/2는 1입니다. 부동 소수점 나누기에서 3/2는 1.5입니다. 반환 유형은 부동 소수점 유형 인 소수이지만 피연산자는 모두 정수이므로 정수 수학을 수행하고 1을 내린 다음 10 진수로 변환합니다. 대신, 적어도 하나의 피연산자를 십진수로 변환 한 다음 나눗셈을 수행해야합니다. – PMV

+0

나는이 답변이 완전히 정확하다고 생각하지 않습니다. – rolls

1

정수는 소수점이없는 따라서 대답은 잘립니다 그것은 1 반환에 타입 캐스팅이 없습니다. 예를 들어 결과가 1.99이면 결과는 1이됩니다 (예 : floor (result)).

소수점이 필요한 경우 부동 소수점을 사용하거나 부동 소수점에 정수를 캐스팅해야합니다. 더 높은 정밀도가 필요한 경우 배정 밀도 부동 소수점을 사용할 수 있습니다 (두 배).

다른 점은이 작업을 수행 할 라이브러리가 있다는 것입니다. 예 : List.Average()는 여러 변수를 평균화합니다.

편집 : 참조 부문에 특정한 더 자세한 답변이 질문에

What is the behavior of integer division?