오늘 코드카타 문제를 풀다가 예상과 다른 결과가 나와서 한참 고민함.. 😥
문제는 정수 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 으로 계산되기 때문에 소수점이 유지된다.
자바는 연산할때 타입이 다르면 더 큰 타입으로 계산하기 때문이다.
'TIL' 카테고리의 다른 글
| Java 리스트(List) 활용 & 반복문 리팩토링 (0) | 2026.06.23 |
|---|---|
| 람다(Lambda)와 스트림(Stream) 간단 정리 (0) | 2026.06.22 |
| Java - Enum으로 문자열 입력값과 연산자를 매칭하기 (0) | 2026.06.19 |
| TIL - 코드 리팩토링 (중복된 코드 메서드로 만들기) (0) | 2026.06.18 |
| 자바입문 첫 코드카타 썰 푼다.. (0) | 2026.06.02 |