반올림 함수
반올림 함수 (Rounding Functions)
숫자를 지정한 자리로 반올림·버림·올림하는 함수들이에요. 천장(ceil), 바닥(floor), 반올림(round) 외에도 나이·기간·2의 거듭제곱 같은 특정 값으로 반올림하는 편의 함수를 제공해요.
출처: 문서
본문
참고: 아래 문서는
system.functions시스템 테이블에서 생성된 내용이에요.
ceil
Introduced in: v1.1.0
floor와 같지만, x보다 크거나 같은 가장 작은 반올림 숫자를 반환해요. 반올림이 오버플로를 일으키면(예: ceiling(255, -1)) 결과는 정의되지 않아요.
구문 (Syntax)
ceiling(x[, N])
별칭 (Aliases): ceiling
인자 (Arguments)
x— 반올림할 값.Float*또는Decimal*또는(U)Int*N— 선택. 반올림할 소수 자릿수. 기본값은 0으로, 정수로 반올림한다는 뜻이에요. 음수일 수 있어요.(U)Int*
반환 값 (Returned value)
x와 같은 타입의 반올림된 숫자를 반환해요. Float* 또는 Decimal* 또는 (U)Int*
예시 (Examples)
기본 사용 (Basic usage)
SELECT ceiling(123.45, 1) AS rounded
┌─rounded─┐
│ 123.5 │
└─────────┘
음수 정밀도 (Negative precision)
SELECT ceiling(123.45, -1)
┌─ceiling(123.45, -1)─┐
│ 130 │
└─────────────────────┘
floor
Introduced in: v1.1.0
x보다 작거나 같은 가장 큰 반올림 숫자를 반환해요. 여기서 반올림 숫자는 1 / 10 * N의 배수이며, 1 / 10 * N이 정확하지 않으면 적절한 데이터 타입의 가장 가까운 숫자가 돼요.
정수 인자는 음수 N 인자로 반올림할 수 있어요. 음수가 아닌 N이면 함수는 x를 반환해요.
반올림이 오버플로를 일으키면(예: floor(-128, -1)) 결과는 정의되지 않아요.
구문 (Syntax)
floor(x[, N])
인자 (Arguments)
x— 반올림할 값.Float*또는Decimal*또는(U)Int*N— 선택. 반올림할 소수 자릿수. 기본값은 0으로, 정수로 반올림한다는 뜻이에요. 음수일 수 있어요.(U)Int*
반환 값 (Returned value)
x와 같은 타입의 반올림된 숫자를 반환해요. Float* 또는 Decimal* 또는 (U)Int*
예시 (Examples)
사용 예 (Usage example)
SELECT floor(123.45, 1) AS rounded
┌─rounded─┐
│ 123.4 │
└─────────┘
음수 정밀도 (Negative precision)
SELECT floor(123.45, -1)
┌─floor(123.45, -1)─┐
│ 120 │
└───────────────────┘
round
Introduced in: v1.1.0
값을 지정한 소수 자릿수 N으로 반올림해요.
N > 0이면 소수점 오른쪽으로 반올림해요.N < 0이면 소수점 왼쪽으로 반올림해요.N = 0이면 다음 정수로 반올림해요.
함수는 지정한 자릿수의 가장 가까운 숫자를 반환해요. 입력 값이 이웃한 두 숫자 사이 정확히 절반이라면, 함수는 Float* 입력에선 banker's rounding(은행가 반올림)을 사용하고 다른 숫자 타입(Decimal*)에선 0에서 멀어지도록 반올림해요.
반올림이 오버플로를 일으키면(예: round(255, -1)) 결과는 정의되지 않아요.
구문 (Syntax)
round(x[, N])
인자 (Arguments)
x— 반올림할 숫자.Float*또는Decimal*또는(U)Int*N— 선택. 반올림할 소수 자릿수. 기본값은0.(U)Int*
반환 값 (Returned value)
x와 같은 타입의 반올림된 숫자를 반환해요. Float* 또는 Decimal* 또는 (U)Int*
예시 (Examples)
Float 입력 (Float inputs)
SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3;
┌───x─┬─round(x)─┐
│ 0 │ 0 │
│ 0.5 │ 0 │
│ 1 │ 1 │
└─────┴──────────┘
Decimal 입력 (Decimal inputs)
SELECT cast(number / 2 AS Decimal(10,4)) AS x, round(x) FROM system.numbers LIMIT 3;
┌───x─┬─round(x)─┐
│ 0 │ 0 │
│ 0.5 │ 1 │
│ 1 │ 1 │
└─────┴──────────┘
roundAge
Introduced in: v1.1.0
사람의 나이를 나타내는 숫자를 받아 표준 연령 범위와 비교하고, 그 숫자가 속하는 범위의 최댓값 또는 최솟값을 반환해요.
age < 1이면0을 반환해요.1 ≤ age ≤ 17이면17을 반환해요.18 ≤ age ≤ 24이면18을 반환해요.25 ≤ age ≤ 34이면25를 반환해요.35 ≤ age ≤ 44이면35를 반환해요.45 ≤ age ≤ 54이면45를 반환해요.age ≥ 55이면55를 반환해요.
구문 (Syntax)
roundAge(num)
인자 (Arguments)
age— 나이(년)를 나타내는 숫자.(U)Int*또는Float*
반환 값 (Returned value)
age가 속하는 범위의 최댓값 또는 최솟값 나이를 반환해요. UInt8
예시 (Examples)
사용 예 (Usage example)
SELECT *, roundAge(*) FROM system.numbers WHERE number IN (0, 5, 20, 31, 37, 54, 72);
┌─number─┬─roundAge(number)─┐
│ 0 │ 0 │
│ 5 │ 17 │
│ 20 │ 18 │
│ 31 │ 25 │
│ 37 │ 35 │
│ 54 │ 45 │
│ 72 │ 55 │
└────────┴──────────────────┘
roundBankers
Introduced in: v20.1.0
숫자를 지정한 소수 자릿수 N으로 반올림해요. 반올림하는 숫자가 두 숫자 사이 정확히 절반이라면, 함수는 IEEE 754에서 부동소수점의 기본 반올림 방식으로 정의된 banker's rounding(은행가 반올림)이라는 반올림 방식을 사용해요.
N > 0이면 소수점 오른쪽으로 반올림해요N < 0이면 소수점 왼쪽으로 반올림해요N = 0이면 다음 정수로 반올림해요
정보: - 반올림 숫자가 두 숫자 사이 정확히 절반일 때, 지정한 소수 자릿수에서 가장 가까운 짝수 자릿수로 반올림돼요. 예:
3.5는4로 올림,2.5는2로 내림.
round함수는 부동소수점 숫자에 대해 동일한 반올림을 수행해요.roundBankers함수는 정수도 같은 방식으로 반올림해요. 예:roundBankers(45, -1) = 40.- 다른 경우 함수는 숫자를 가장 가까운 정수로 반올림해요.
팁: banker's rounding을 사용하면 숫자 반올림이 이 숫자들의 합산·차감 결과에 미치는 영향을 줄일 수 있어요.
예를 들어 1.5, 2.5, 3.5, 4.5를 다른 반올림으로 더하면:
- 반올림 없음:
1.5 + 2.5 + 3.5 + 4.5 = 12. - Banker's rounding:
2 + 2 + 4 + 4 = 12. - 가장 가까운 정수로 반올림:
2 + 3 + 4 + 5 = 14.
구문 (Syntax)
roundBankers(x[, N])
인자 (Arguments)
x— 반올림할 숫자.(U)Int*또는Decimal*또는Float*[, N]— 선택. 반올림할 소수 자릿수. 기본값은0.(U)Int*
반환 값 (Returned value)
banker's rounding 방식으로 반올림된 값을 반환해요. (U)Int* 또는 Decimal* 또는 Float*
예시 (Examples)
기본 사용 (Basic usage)
SELECT number / 2 AS x, roundBankers(x, 0) AS b FROM system.numbers LIMIT 10
┌───x─┬─b─┐
│ 0 │ 0 │
│ 0.5 │ 0 │
│ 1 │ 1 │
│ 1.5 │ 2 │
│ 2 │ 2 │
│ 2.5 │ 2 │
│ 3 │ 3 │
│ 3.5 │ 4 │
│ 4 │ 4 │
│ 4.5 │ 4 │
└─────┴───┘
roundDown
Introduced in: v20.1.0
숫자를 지정한 배열의 요소 중 하나로 내림해요. 값이 하한보다 작으면 하한을 반환해요.
구문 (Syntax)
roundDown(num, arr)
인자 (Arguments)
num— 내림할 숫자.(U)Int*또는Decimal*또는Float*arr—num을 내림할 요소들의 배열.Array((U)Int*)또는Array(Float*)
반환 값 (Returned value)
arr의 요소 중 하나로 내림된 숫자를 반환해요. 값이 가장 낮은 하한보다 작으면 가장 낮은 하한을 반환해요. (U)Int* 또는 Float*
예시 (Examples)
사용 예 (Usage example)
SELECT *, roundDown(*, [3, 4, 5]) FROM system.numbers WHERE number IN (0, 1, 2, 3, 4, 5)
┌─number─┬─roundDown(number, [3, 4, 5])─┐
│ 0 │ 3 │
│ 1 │ 3 │
│ 2 │ 3 │
│ 3 │ 3 │
│ 4 │ 4 │
│ 5 │ 5 │
└────────┴──────────────────────────────┘
roundDuration
Introduced in: v1.1.0
숫자를 일반적으로 쓰는 기간 집합 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000 중 가장 가까운 값으로 내림해요. 숫자가 1보다 작으면 0을 반환해요.
구문 (Syntax)
roundDuration(num)
인자 (Arguments)
num— 일반 기간 집합의 숫자 중 하나로 반올림할 숫자.(U)Int*또는Float*
반환 값 (Returned value)
num < 1이면 0을 반환해요. 그 외에는 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000 중 하나. UInt16
예시 (Examples)
사용 예 (Usage example)
SELECT *, roundDuration(*) FROM system.numbers WHERE number IN (0, 9, 19, 47, 101, 149, 205, 271, 421, 789, 1423, 2345, 4567, 9876, 24680, 42573)
┌─number─┬─roundDuration(number)─┐
│ 0 │ 0 │
│ 9 │ 1 │
│ 19 │ 10 │
│ 47 │ 30 │
│ 101 │ 60 │
│ 149 │ 120 │
│ 205 │ 180 │
│ 271 │ 240 │
│ 421 │ 300 │
│ 789 │ 600 │
│ 1423 │ 1200 │
│ 2345 │ 1800 │
│ 4567 │ 3600 │
│ 9876 │ 7200 │
│ 24680 │ 18000 │
│ 42573 │ 36000 │
└────────┴───────────────────────┘
roundToExp2
Introduced in: v1.1.0
숫자를 가장 가까운 (음이 아닌 정수) 2의 거듭제곱으로 내림해요. 숫자가 1보다 작으면 0을 반환해요.
구문 (Syntax)
roundToExp2(num)
인자 (Arguments)
num— 반올림할 숫자.(U)Int*또는Float*
반환 값 (Returned value)
num을 가장 가까운 (음이 아닌 정수) 2의 거듭제곱으로 내림한 값, 또는 num < 1이면 0을 반환해요. (U)Int* 또는 Float*
예시 (Examples)
사용 예 (Usage example)
SELECT *, roundToExp2(*) FROM system.numbers WHERE number IN (0, 2, 5, 10, 19, 50)
┌─number─┬─roundToExp2(number)─┐
│ 0 │ 0 │
│ 2 │ 2 │
│ 5 │ 4 │
│ 10 │ 8 │
│ 19 │ 16 │
│ 50 │ 32 │
└────────┴─────────────────────┘
trunc
Introduced in: v1.1.0
floor와 같지만, x의 절댓값보다 작거나 같은 가장 큰 절댓값을 가진 반올림 숫자를 반환해요.
구문 (Syntax)
truncate(x[, N])
별칭 (Aliases): truncate
인자 (Arguments)
x— 반올림할 값.Float*또는Decimal*또는(U)Int*N— 선택. 반올림할 소수 자릿수. 기본값은 0으로, 정수로 반올림한다는 뜻이에요.(U)Int*
반환 값 (Returned value)
x와 같은 타입의 반올림된 숫자를 반환해요. Float* 또는 Decimal* 또는 (U)Int*
예시 (Examples)
기본 사용 (Basic usage)
SELECT truncate(123.499, 1) AS res;
┌───res─┐
│ 123.4 │
└───────┘
더 알아보기 (Learn more)
- ClickHouse 함수 목록 전체는 함수 개요를 참고해요.