Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL TRUNCATE()와 ROUND() 함수의 핵심 차이점 완벽 정리

MySQL의 TRUNCATE() 함수란?

TRUNCATE() 함수는 숫자 X를 소수점 D자리까지 잘라낸(truncate) 값을 반환합니다. 이 함수의 동작 방식은 다음과 같습니다.

  • D가 0이면 소수점 이하를 모두 제거하고 정수 부분만 반환합니다.
  • D가 음수이면 정수 부분에서 D개만큼의 자릿수를 잘라냅니다.

다음 예제를 통해 확인해 보겠습니다.

mysql> Select TRUNCATE(7.536432,2);
+----------------------+
| TRUNCATE(7.536432,2) |
+----------------------+
|                 7.53 |
+----------------------+
1 row in set (0.00 sec)

위 예제에서 7.536432를 소수점 둘째 자리까지 자르면 7.53이 반환됩니다. 세 번째 자리 숫자(6)가 5보다 크더라도 반올림되지 않고 단순히 잘려나간다는 점에 주목하세요.

MySQL의 ROUND() 함수란?

ROUND() 함수는 숫자 X를 가장 가까운 정수로 반올림하여 반환합니다. 두 번째 인수 D가 주어지면, 소수점 D번째 자리까지 반올림한 결과를 반환합니다.

  • D를 생략하면 가장 가까운 정수로 반올림됩니다.
  • D가 양수여야 하며, 그렇지 않으면 소수점 오른쪽의 모든 자릿수가 제거됩니다.

다음 예제를 살펴보겠습니다.

mysql> SELECT ROUND(5.693893);
+---------------------------------------------------------+
|                     ROUND(5.693893)                     |
+---------------------------------------------------------+
|                           6                             |
+---------------------------------------------------------+
1 row in set (0.00 sec)

mysql> SELECT ROUND(5.693893,2);
+---------------------------------------------------------+
|                   ROUND(5.693893,2)                     |
+---------------------------------------------------------+
|                          5.69                           |
+---------------------------------------------------------+
1 row in set (0.00 sec)

첫 번째 예제에서는 소수 첫째 자리의 6이 5 이상이므로 6으로 반올림되었고, 두 번째 예제에서는 소수 셋째 자리인 3이 5 미만이므로 5.69로 반올림(내림)되었습니다.

TRUNCATE()와 ROUND()의 핵심 차이점

위의 정의와 예제에서 두 함수의 차이점을 다음과 같이 정리할 수 있습니다.

  • ROUND(): 두 번째 인수 D 이후의 자릿수가 5 이상인지 여부를 판단하여 숫자를 올리거나 내립니다. 즉, 일반적인 반올림 규칙을 따릅니다.
  • TRUNCATE(): D번째 소수 자릿수 이후의 값이 5 이상인지 확인하지 않고 무조건 잘라냅니다. 즉, 항상 버림 처리됩니다.

실전 비교 예제

같은 숫자에 두 함수를 적용하면 차이가 더욱 명확해집니다.

mysql> Select ROUND(1.289,2) AS 'AFTER ROUND', TRUNCATE(1.289,2) AS 'AFTER TRUNCATE';
+-------------+----------------+
| AFTER ROUND | AFTER TRUNCATE |
+-------------+----------------+
|        1.29 |           1.28 |
+-------------+----------------+
1 row in set (0.00 sec)

숫자 1.289를 소수점 둘째 자리까지 처리할 때 결과가 서로 다릅니다. ROUND()는 셋째 자리의 9가 5 이상이므로 1.29로 반올림하지만, TRUNCATE()는 단순히 잘라내기 때문에 1.28을 반환합니다.

어떤 상황에서 어떤 함수를 사용해야 할까?

  • 금융 계산처럼 절대 반올림해서는 안 되는 경우에는 TRUNCATE()를 사용하는 것이 안전합니다.
  • 일반적인 수치 표시나 통계 처리에는 직관적인 ROUND()가 적합합니다.

두 함수의 동작 방식을 정확히 이해하고 있으면 데이터 처리 시 발생할 수 있는 예기치 않은 오류를 예방할 수 있습니다.