DB

[MySQL] ROUND, TRUNCATE로 소수점 제어하기

인생아 2025. 7. 24. 18:38
반응형

숫자를 다루는 모든 데이터 처리에서 소수점 자릿수를 제어하는 작업은 꼭 필요하다. MySQL에서는 이런 작업을 위해 대표적으로 ROUND()TRUNCATE() 함수를 제공한다. 이 두 함수는 공통적으로 숫자의 소수점을 다루지만, 반올림(rounding)이냐 버림(truncation)이냐에 따라 동작 방식이 완전히 다르다.

ROUND() 함수 – 반올림 처리

ROUND(number, decimal_places) 함수는 지정한 소수점 자릿수까지 반올림하여 값을 반환한다.

SELECT ROUND(123.4567, 2); -- 결과: 123.46
SELECT ROUND(123.4567, 0); -- 결과: 123

소수점 이하를 반올림하고, 두 번째 인자를 생략하면 정수로 반올림한다.

예제: 가격 소수점 반올림

SELECT product_id, price, ROUND(price, 1) AS round_price
FROM products;

1원 단위까지 반올림해 가격을 표시할 수 있다. 전자상거래, 송금 시스템 등에서 사용된다.

예제: 반올림하여 백단위 처리

SELECT ROUND(amount, -2) AS 백단위반올림
FROM payments;

소수점 아래가 아닌 정수 자릿수에서 반올림하려면 음수 값을 두 번째 인자로 사용한다. 이 기능은 백단위 결제, 천단위 세금 계산 등에 유용하다.

반응형

TRUNCATE() 함수 – 버림 처리

TRUNCATE(number, decimal_places) 함수는 소수점 아래를 버림(truncate) 처리하여 해당 자릿수까지만 남긴다.

SELECT TRUNCATE(123.4567, 2); -- 결과: 123.45
SELECT TRUNCATE(123.4567, 0); -- 결과: 123

반올림 없이 단순히 해당 자릿수까지 잘라내는 방식으로 처리된다.

예제: 포인트 절사

SELECT TRUNCATE(value, 4) AS 정확도값
FROM lab_results;

정수 단위까지만 남기고 소수점은 절사 처리한다. 포인트 절사, 할인율 계산, 통계 요약 등에 사용된다.

예제: 소수 넷째자리까지만 유지

SELECT TRUNCATE(value, 4) AS 정확도값
FROM lab_results;

정밀한 수치를 표시할 때 사용되며, 금융, 과학, 계측 시스템에서 유용하다.

ROUND vs TRUNCATE 비교 정리

항목 ROUND() TRUNCATE()
기능 반올림 버림 (절사)
음수 자리수 지원 (정수 자리 반올림) 지원 (정수 자리 버림)
금융 정산 부가세, 이자, 정산에 활용 할인율, 포인트, 단가 절사
반환 타입 DOUBLE 또는 DECIMAL DECIMAL 또는 DOUBLE

둘 다 자릿수 제한은 가능하지만, 어떤 방식으로 처리되는지가 핵심 차이다.

실무 예제: 환율 처리

SELECT currency,
       ROUND(exchange_rate, 2) AS round_rate,
       TRUNCATE(exchange_rate, 2) AS cut_rate
FROM forex;

표시는 반올림된 값을 사용하고, 정산이나 내부 계산은 절사된 값을 사용하는 방식으로 같이 쓰는 경우가 많다.

정리

  • ROUND()는 반올림 함수로 소수점 자릿수 지정이 가능하며, 정수 자리도 반올림 가능하다.
  • TRUNCATE()는 버림 함수로 단순히 자릿수를 잘라내며, 반올림은 하지 않는다.
  • 두 함수 모두 정수와 실수 데이터를 처리할 수 있으며, 실무에서는 함수의 의도를 명확히 이해하고 상황에 맞게 선택하는 것이 중요하다.
  • 금액 처리, 포인트 절사, 리포트 정리 등 다양한 분야에서 이 두 함수는 필수적이다.

참고 문서

https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_round
https://dev.mysql.com/doc/refman/8.0/en/mathematical-functions.html#function_truncate

 

반응형