숫자를 다루는 모든 데이터 처리에서 소수점 자릿수를 제어하는 작업은 꼭 필요하다. 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
'DB' 카테고리의 다른 글
| [MySQL] ASIN, ACOS, ATAN 역삼각함수 활용법 (2) | 2025.07.24 |
|---|---|
| [MySQL] SIN, COS, TAN 삼각함수 완전 정리 📐 (1) | 2025.07.24 |
| [MySQL] SQRT, EXP, LOG로 제곱근과 로그 구하기 (0) | 2025.07.24 |
| [MySQL] MOD, DIV, %, POW로 나머지·제곱 계산하기 (1) | 2025.07.24 |
| [MySQL] IF vs CASE 차이점과 선택 기준 정리 (0) | 2025.07.24 |
| [MySQL] ABS, CEIL, FLOOR로 절댓값과 반올림 처리하기 (1) | 2025.07.24 |
| [MySQL] 실무에서 자주 쓰는 날짜/시간 함수 조합 예제 모음 (2) | 2025.07.23 |
| [MySQL] LAST_DAY, MAKEDATE, MAKETIME 등 특수 날짜 생성 함수 (1) | 2025.07.23 |