TIL

코드카타를 풀다가 알게 된 int와 double의 함정

chungmani 2026. 6. 10. 20:43

 

오늘 코드카타 문제를 풀다가 예상과 다른 결과가 나와서 한참 고민함.. 😥

문제는 정수 2개를 나눈뒤 1000을 곱한 후 그 값을 int 변수에 저장하는 것이었음.

예) 1 / 2 * 1000 = 500

double divide = num1 / num2 * 1000; // num1과 num2는 int 매개변수로 주어짐
 

나는 divide가 double 타입이니까 소수점 계산이 자연스럽게 될 줄 알았는데, 그게 아니었다! ㅠㅠ 

 

 

왜 원하는 결과가 나오지 않았을까?

int num1 = 1;
int num2 = 2;

double divide = num1 / num2 * 1000;
 

위 코드를 실행하면,

자바는 먼저 아래를 계산한다.

num1 / num2
 

그런데 num1과 num2가 모두 int이기 때문에 결과도 int로 계산된다.

즉, 1 / 2를 하면 소수점은 버려지고 0이 됨..

그뒤에 1000이 곱해지고 마지막 결과가 double 변수에 저장된는 거였음.. 

결국 결과는 0.0 이되는 거

해결 방법

실수 계산을 하려면 계산에 참여하는 값 중 하나 이상을 double로 만들어야 함

double divide = (double) num1 / num2 * 1000;

 

이렇게 하면 1.0 / 2.0 으로 계산되기 때문에 소수점이 유지된다.

자바는 연산할때 타입이 다르면 더 큰 타입으로 계산하기 때문이다.