본문 바로가기

C++/C.S 필요한 C++ 문법!

C++ 0.01 - int 와 Float 구분하기!!

Int , Float 의 자료형에 따른 차이!


필자는 항상 int 와 Float가 헷갈렸다. 

특히 int 와 Float가 섞인 연산이 굉장히 헷갈렸다.

Float 형식으로 출력을 하고 싶은데 계속 int 형태로 출력이 되어 골머리를 앓았던 적이 한두번이 아니다.

그래서 이번에 확실히 알고, 이를 정리해놓기 위해서  블로그에 해당 내용을 남기기로 했다.

 

Code


#include <iostream>
using namespaces std;

int
main(){
	
    float bmi; // weight * (height * height)  여기서 height은 m 단위이다.
    int weight = 50;
    int height = 165;
    
    bmi = weight /  ((float)(height / 100) * (height / 100));
    
    // 0 
    
}

예를 들어서 BMI를 계산하는 문제가 있다.

BMI = weight * (height * height) 
height 는 meter 단위이다.

 

Height 으로 들어간 것은 cm 단위이기 때문에 100 을 나눠서 곱해줘야했다.

하지만 위의 코드에서 볼 수 있듯이 165 / 100은 int 자료형끼리의 연산이므로 소수점이 나올리가 만무했다.

그래서 필자는 앞에 Float를 씌워줘서 형 변환을 하면 되겠지? 라는 생각을 했지만 그건 나의 착각이었다.. ㅎ

 

무엇이 착각이고 어떻게 해결 할 수 있을까??

 

해결 방법


#include <iostream>
using namespaces std;

int
main(){
	
    float bmi; // weight * (height * height)  여기서 height은 m 단위이다.
    int weight = 50;
    int height = 165;
    
    // 해결 방법 !!
    bmi = weight /  ((height / 100.0) * (height / 100.0));
    
    // 100에 100.0을 붙여서 해결하였다!
}

이게 해결 될 수 있었던 이유는 내가 간과하고 있던 몇가지 "기본 개념" 때문이었다.

 

  • 첫 번째 개념은 int 와 int 연산은 무조건 int                                                                     
  • Float 와 int 연산은 Float => 자료형이 더 큰 것에 자료형이 따라간다.                      
    • 즉 여기서 반대로 int 에 float를 넣는 것은 안된다.                             

 

해결 방법은 간단했다. 

처음에 시도했던 형 변환이 되지 않았던 이유는 

이미 (Float) (int * int) 로 Float로 형 변환을 하기도 전에 int 연산이 되었기 때문에

거의 무조건 적으로 " 1 " 이 될 수 밖에 없었다.

 

고로 (height / Float형) 을 해주면 이는 Float로 자동 형 변환 되면서 뒤에 소수점이 붙어나올 수 있었던 것이다.

 

 

결론


Int 와 Float를 계산할 때에는 반드시 Float로 형 변환을 시켜주도록 하자.

'C++ > C.S 필요한 C++ 문법!' 카테고리의 다른 글

[중요] C++ 0.06 - Reference Operator &  (0) 2021.10.26
C++ 0.05 - Default Function Arguments  (0) 2021.10.26
C++ 0.04 - Inline functions  (0) 2021.10.26
C++ 0.03 - Input & Output  (0) 2021.10.25
C++ 0.02 - Namespaces  (0) 2021.10.25