Loading...
MySQL 9.5 Reference Manual 9.5의 14.25.4 Rounding Behavior의 한국어 번역본입니다.
아래의 경우에 피드백에서 신고해주신다면 반영하겠습니다.
감사합니다 :)
이 섹션에서는 ROUND() 함수와 정확한 값 타입
(DECIMAL 및 integer) 컬럼으로의 insert에 대한 정밀 산술 반올림을 설명합니다.
ROUND() 함수는 인자가 정확한 값인지
대략값인지에 따라 다르게 반올림합니다:
정확한 값 숫자의 경우,
ROUND()는 “round
half up” 규칙을 사용합니다. 즉, 소수 부분이 .5 이상인 값은
양수일 때는 다음 integer로 올림하고 음수일 때는 이전 integer로 내림합니다.
(다시 말해, 0에서 떨어지는 방향으로 반올림합니다.)
소수 부분이 .5 미만인 값은 양수일 때는 이전 integer로 내림하고
음수일 때는 다음 integer로 올림합니다. (다시 말해,
0을 향하는 방향으로 반올림합니다.)
대략값 숫자의 경우 결과는 C 라이브러리에 따라 달라집니다.
많은 시스템에서 이는 ROUND()가
“round to nearest even” 규칙을 사용함을 의미합니다. 즉,
두 integer의 정확히 중간에 있는 소수 부분을 가진 값은
가장 가까운 짝수 integer로 반올림됩니다.
다음 예제는 정확한 값과 대략값에 대해 반올림이 어떻게 다르게 동작하는지 보여 줍니다:
1mysql> SELECT ROUND(2.5), ROUND(25E-1); 2+------------+--------------+ 3| ROUND(2.5) | ROUND(25E-1) | 4+------------+--------------+ 5| 3 | 2 | 6+------------+--------------+
DECIMAL 또는
integer 컬럼으로 insert하는 경우, 대상은 정확한 데이터 타입이므로,
삽입할 값이 정확한 값이든 대략값이든 상관없이 반올림은
“round half away from zero”를 사용합니다:
1mysql> CREATE TABLE t (d DECIMAL(10,0)); 2Query OK, 0 rows affected (0.00 sec) 3 4mysql> INSERT INTO t VALUES(2.5),(2.5E0); 5Query OK, 2 rows affected, 2 warnings (0.00 sec) 6Records: 2 Duplicates: 0 Warnings: 2 7 8mysql> SHOW WARNINGS; 9+-------+------+----------------------------------------+ 10| Level | Code | Message | 11+-------+------+----------------------------------------+ 12| Note | 1265 | Data truncated for column 'd' at row 1 | 13| Note | 1265 | Data truncated for column 'd' at row 2 | 14+-------+------+----------------------------------------+ 152 rows in set (0.00 sec) 16 17mysql> SELECT d FROM t; 18+------+ 19| d | 20+------+ 21| 3 | 22| 3 | 23+------+ 242 rows in set (0.00 sec)
SHOW WARNINGS 문은
소수 부분의 반올림으로 인한 잘림(truncation)에 의해 생성된
note를 표시합니다. 이러한 truncation은 strict SQL 모드에서도
에러가 아닙니다( Section 14.25.3, “Expression Handling” 참조).
14.25.3 Expression Handling
14.25.5 Precision Math Examples