[C#] int와 float의 형변환과 연산
2023. 6. 29. 18:04ㆍC#
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
반응형
'C#' 카테고리의 다른 글
[C#] 콘솔과 유니티에서 숫자 입력값 받기 (0) | 2023.08.02 |
---|---|
[C#] bool과 long의 형태 (0) | 2023.08.01 |
[C#] 컴퓨터 구조 입문(High/Low Level, 메모리, 함수의 구현/호출부, delegate) (0) | 2023.07.07 |
[C#] 함수의 입출력 (0) | 2023.07.06 |
[Unity] C# Class, 생성자(constructor) 정리 (0) | 2023.05.02 |