[C#] int와 float의 형변환과 연산

2023. 6. 29. 18:04C#

728x90
반응형

int는 정수, float는 실수를 말한다.

 

위의 그림과 같이 정수는 실수 안에 포함된다. 이 때문에 형변환에서 주의할 사항이 있다.

 

 

int intNum;
intNum = 2.1f;

정수로 정의된 intNum 변수에 2.1f의 실수 값을 저장하면 실행했을 때 오류가 발생하게 된다.

 

 

float fNum
fNum = 2;

반대로, 실수로 정의된 fNum에 정수 값을 저장해도 오류는 발생하지 않는다. 정수 2를 2.0f 형태로 저장하게 된다.

 

 

오류를 해결하는 방법은 다음과 같다.

int intNum;
intNum = (int)2.1f;

값 앞에 형변환 연산자를 넣어주는 건데, 첫째 줄 int와 형변환 연산자 (int)는 다르다. 첫째 줄 int는 변수를 선언하는 것이고 (int)는 형변환을 해주는 역할이다. intNum에는 소수점 아래 값이 버려지고 2가 저장된다. 이것을 강제형변환이라고 한다.

 

 


 

 

이러한 현상은 사칙연산에서도 동일하다.

int a = 2;
float b = 0.1f;
int c;

c = a + b;

더하는 두 수를 a는 정수, b는 실수라고 할 때, a는 자동 형변환으로 2.0f로 바뀌어 더해지게 된다. 따라서 a+b의 값은 2.1f가 되지만 c는 정수이기 때문에 2.1f를 저장할 수 없어 오류가 발생하게 된다.

 

 

해결 방법은,

  • c를 float로 바꿔 형을 일치시켜주는 방법
  • b를 (int)b로써 정수형으로 변환시켜서 b는 0이 되어버려 소수점 아래가 없어지게 됨
int a = 2;
float b = 0.1f;
int c;

c = a + (int)b;

 

  • a+b 합 전체를 (int)(a+b)로 형변환 시키는 방법. 마찬가지로 소수점 아래는 삭제됨
int a = 2;
float b = 0.1f;
int c;

c = (int)(a + b);

 

 


 

 

나눗셈의 경우를 특별하게 보도록 하자.

int a = 7;
int b = 2;
float c;

c = a / b;
print(c);

7을 2로 나누면 3.5이지만 a/b 연산을 했을 때 3이 나와서 최종적으로 3으로 출력이 된다. c를 실수 선언을 했어도 3.5가 출력되지 않는 것이다.

 

 

해결 방법은

  • a, b, c 전체 변수를 float로 변경
  • a, b 둘 다 그대로 int로 두고 연산할 때 (float) 강제형변환
int a = 7;
int b = 2;
float c;

c = (float)a / b;
print(c);

 

 


 

 

강제형변환으로 평균 구하기

int a, b, c, sum;
float average;

a = 5;
b = 20;
c = 30;
sum = a + b + c;
average = (float)sum / 3;

print(average);
728x90
반응형