[java] 나눗셈 한 뒤 소수점까지 출력하는 법

이희수·2024년 12월 26일

프로그래머스 알고리즘 문제를 풀다 아래와 같은 문제를 만났다.

원소의 평균값을 리턴해야 하므로, 원소를 다 더하고, 원소의 개수만큼 나눈 값을 리턴하도록 아래와 같이 코딩했는데 실패가 떴다.

class Solution {
    public double solution(int[] numbers) {
        double answer = 0;
        int sum = 0;
        for(int i = 0; i < numbers.length; i++){
            sum = sum + numbers[i];
        }
        answer = sum / numbers.length;
        return answer;
    }
}

그 이유는, 자바에선 나누기로 '/'기호를 쓰면 몫만 결과값으로 가지게 되기 때문!

나누기할 때에 소수점까지 결과로 가져오고 싶다면, 나누는 수 혹은 나누어지는 수를 double로 형변환(형 설정?)을 해주어야 한다.

    answer = sum / (double)numbers.length;
    
    answer = (double)sum / numbers.length;
    
    answer = (double)sum / (double)numbers.length;
    

위의 세가지 경우 모두 정답으로 처리 되었다..!

다만 아래와 같이 (double)(sum / numbers.length); 이라고 작성하는 경우에는 정답이 아니게 된다.

자바의 나누기(/) 연산이 끝난 시점에서 이미 소수점 정보를 잃어버린 int로 결과값을 가지게 되어버린 상태이고, 그 이후에 double로 바꿔줘봤자 잃어버린 소수점을 되찾을 수 없어서 라고 해석할 수 있을 것이다.

0개의 댓글