Language/C#

[C#] int형 변수끼리 나눗셈 결과 소숫점 이하 값이 버려지는 현상

범데이 2023. 7. 2. 23:33

JavaScript과 같은 동적 타이핑(dynamic typing)을 지원하는 언어를 사용하다가 C#으로 넘어와 개발하다보면 자료형에 대해 간과하다가 이슈가 생길 때가 있다

.

이번 포스팅에서는 int형 변수끼리 나눗셈 수행하면 소숫점 이하 값이 버려지는 현상과 그 이유에 대해 알아보자.

 

 

1. 문제 현상

C#에서 int현 변수끼리의 나눗셈을 수행하면 소숫점 이하 값이 버려지고, 정수 결과로 나타나는 경우가 있다.

using System;

public class Program
{
    public static void Main()
    {
        int num1 = 3;
        int num2 = 2;

        Console.WriteLine("나눗셈 결과: " + num1 / num2);
    }
}

위의 코드를 실행하면 결과는 '1'이 출력된다. 이러한 현상은 C#의 정수 나눗셈 규칙* 때문에 발생한다.

(*정수 나눗셈 규칙: C#에서 두 정수형 변수를 나눌 때, 결과는 소숫점 값이 있더라도 반드시 정수(int) 형태로 나오게 된다. 즉, 소숫점 이하 값은 버려지고, 정수 부분만 남게 된다. 이러한 동작은 "정수 나눗셈"이라고도 불린다.)

 

그 이유는 그것이 언어가 동작하도록 정의된 방식이기 때문에, 정수 사이의 모든 수학적 연산이 항상 정수로 귀결되는 것이 구조의 이치에 맞기 때문이다. 

 

 

※추가적인 내용: 만일 위의 num1 혹은 num2변수중 하나라도 float, double과 같은 부동 소숫점 타입이면, 자동으로 부동 소숫점 타입으로 형변환이 되어 소숫점을 포함한 '1.5'라는 올바른 값이 출력된다.

 

 

 

2. 해결 방안

만약, 정확한 나눗셈 결과를 얻고 싶다면, 나눗셈을 하기 전에 적절한 형변환을 사용해야 한다. 

예를 들어, 다음과 같이 double형으로 형변환하여 나눗셈을 수행할 수 있다.

 

double result = (double)3 / 2;
Console.WriteLine("나눗셈 결과: " + result);

 

이렇게 하면  result 변수에 '1.5'가 저장되어 원하는 부동 소수점 결과를 얻을 수 있다.

 

 

3. 결론

이렇게 C#에서 int형 변수끼리의 나눗셈 결과가 소숫점이 떨어지는 현상과 그 이유에 대해 간단히 알아보았다.

정확한 나눗셈 결과를 얻기 위해 형변환을 적절히 활용하는 것이 중요하며, 이를 통해 원하는 연산 결과를 얻을 수 있다.

 

 

 


#References

https://www.quora.com/C-Why-does-integer-division-return-an-integer-and-not-a-float

https://ilyana.dev/blog/2021-04-17-integer-division/

반응형