프로그램/Java

[Java] 소수점 자르기(반올림, 내림, 버림) 방법

neorc 2025. 3. 14. 15:54
Java에서 소수점 이하 자리수를 조정하는 것은 다양한 프로그램에서 필수적인 기능입니다. 예를 들어, 금융 계산에서 소수점 두 자리까지 표시하거나, 특정한 자리수까지만 반올림해야 할 때가 있습니다.
Java에서는 Math 클래스와 BigDecimal 클래스를 활용하여 소수점 처리를 쉽게 할 수 있습니다. 이 글에서는 소수점 반올림, 올림, 내림, 버림 등 다양한 방법을 코드 예제와 함께 소개하겠습니다

Math.round()로 반올림하기

Math.round() 메서드는 가장 간단한 반올림 방법입니다.

📌 소수점 첫째 자리에서 반올림하는 예제:

public class RoundingExample {
    public static void main(String[] args) {
        double num = 3.567;
        long rounded = Math.round(num); // 소수점 첫째 자리에서 반올림
        System.out.println("반올림 결과: " + rounded); // 출력: 4
    }
}

Math.round(3.567)4로 반올림됩니다.

✔ 기본적으로 소수점 첫째 자리에서 반올림하는 특징이 있습니다.

Math.ceil()로 올림하기

Math.ceil()은 항상 올림(반올림이 아니라 무조건 큰 값으로 올림) 처리를 합니다.

📌 소수점 올림 예제:

public class CeilExample {
    public static void main(String[] args) {
        double num = 3.14;
        double ceilValue = Math.ceil(num);
        System.out.println("올림 결과: " + ceilValue); // 출력: 4.0
    }
}

Math.ceil(3.14)4.0으로 올림됩니다.

✔ 무조건 큰 정수로 올림이 되기 때문에, 특정 자리에서 반올림을 원하는 경우에는 사용하지 않습니다.

Math.floor()로 내림(버림)하기

Math.floor()는 항상 내림(작은 값으로 버림) 합니다.

📌 소수점 내림 예제:

public class FloorExample {
    public static void main(String[] args) {
        double num = 3.98;
        double floorValue = Math.floor(num);
        System.out.println("내림 결과: " + floorValue); // 출력: 3.0
    }
}

Math.floor(3.98)3.0으로 내림됩니다.

✔ 항상 작은 정수로 변환되기 때문에, 특정 자리에서 반올림을 원할 경우 적절하지 않습니다.

BigDecimal을 이용한 소수점 자리수 제한

금융 계산처럼 정확한 소수점 처리가 필요할 때는 BigDecimal을 사용하는 것이 좋습니다.

📌 소수점 둘째 자리까지 반올림하는 예제:

import java.math.BigDecimal;
import java.math.RoundingMode;

public class BigDecimalExample {
    public static void main(String[] args) {
        BigDecimal num = new BigDecimal("3.56789");
        BigDecimal roundedNum = num.setScale(2, RoundingMode.HALF_UP);
        System.out.println("소수점 둘째 자리 반올림: " + roundedNum); // 출력: 3.57
    }
}

setScale(2, RoundingMode.HALF_UP) → 소수점 둘째 자리에서 반올림됩니다.

RoundingMode.HALF_UP은 일반적인 5에서 반올림하는 방식입니다.

BigDecimal을 사용하면 정확한 계산이 가능하여 금융 프로그램에서 자주 활용됩니다.

 

📌 다양한 RoundingMode 옵션:

  • RoundingMode.UP → 무조건 올림
  • RoundingMode.DOWN → 무조건 버림
  • RoundingMode.HALF_UP → 일반적인 반올림(5 이상 올림)
  • RoundingMode.HALF_DOWN → 5일 경우 버림
  • RoundingMode.HALF_EVEN → 은행가 반올림 방식

특정 자리수에서 반올림하는 사용자 정의 함수

자주 사용되는 소수점 처리를 위한 유틸리티 메서드를 만들어 활용할 수도 있습니다.

📌 소수점 n번째 자리에서 반올림하는 메서드:

public class RoundUtil {
    public static double round(double value, int places) {
        if (places < 0) throw new IllegalArgumentException("소수점 자리수는 0 이상이어야 합니다.");
        
        BigDecimal bd = new BigDecimal(Double.toString(value));
        bd = bd.setScale(places, RoundingMode.HALF_UP);
        return bd.doubleValue();
    }
    
    public static void main(String[] args) {
        System.out.println("소수점 둘째 자리 반올림: " + round(3.56789, 2)); // 출력: 3.57
    }
}

round(3.56789, 2)3.57 (소수점 둘째 자리에서 반올림)

✔ 여러 자리수에서도 사용할 수 있도록 유연한 코드입니다.

결론 (Conclusion)

Java에서 소수점 이하 자르기(반올림, 내림, 버림) 방법을 정리하면 다음과 같습니다.

Math.round() → 기본 반올림(소수 첫째 자리 기준)

Math.ceil() → 무조건 올림

Math.floor() → 무조건 내림(버림)

BigDecimal → 금융 계산 등 정밀한 연산을 위한 추천 방법

setScale(n, RoundingMode.XXX) → 원하는 자리수에서 반올림 가능

✔ 사용자 정의 함수(round(value, places))로 유연한 소수점 처리가 가능