본문으로 바로가기
본문으로 바로가기

반올림 함수

참고

다음 문서는 system.functions 시스템 테이블을 기반으로 생성되었습니다.

ceil

도입 버전: v1.1

floor와 유사하지만, x보다 크거나 같은 수 중 가장 작은 값으로 올림한 결과를 반환합니다. 올림으로 인해 오버플로가 발생하는 경우(예: ceiling(255, -1)) 결과는 정의되지 않습니다.

구문

ceiling(x[, N])

별칭: ceiling

인수

  • x — 반올림할 값. Float* 또는 Decimal* 또는 (U)Int*
  • N — 선택적 인수입니다. 반올림할 소수 자릿수입니다. 기본값은 0이며, 정수로 반올림함을 의미합니다. 음수가 될 수도 있습니다. (U)Int*

반환 값

x와 동일한 타입의 반올림된 숫자를 반환합니다. Float* 또는 Decimal* 또는 (U)Int*

예시

기본 사용법

SELECT ceiling(123.45, 1) AS rounded
┌─rounded─┐
│   123.5 │
└─────────┘

음수 정밀도

SELECT ceiling(123.45, -1)
┌─ceiling(123.45, -1)─┐
│                 130 │
└─────────────────────┘

floor

도입된 버전: v1.1

반환 값은 x 이하인 값 가운데 가장 큰 반올림 값입니다. 이때 반올림 값은 1 / 10 * N의 배수이거나, 1 / 10 * N이 정확하지 않은 경우 해당 데이터 타입에서 가장 가까운 수입니다.

정수 인수는 N을 음수로 지정하여 반올림할 수 있습니다. N이 0 이상이면 함수는 x를 그대로 반환합니다.

반올림으로 오버플로우가 발생하는 경우(예: floor(-128, -1)) 결과는 정의되지 않습니다.

구문

floor(x[, N])

인수

  • x — 반올림할 값. Float* 또는 Decimal* 또는 (U)Int*
  • N — 선택 사항. 반올림할 소수 자릿수입니다. 기본값은 0으로, 정수로 반올림함을 의미합니다. 음수일 수 있습니다. (U)Int*

반환 값

x와 같은 타입의 반올림된 숫자를 반환합니다. Float* 또는 Decimal* 또는 (U)Int*

예시

사용 예시

SELECT floor(123.45, 1) AS rounded
┌─rounded─┐
│   123.4 │
└─────────┘

음수 자릿수

SELECT floor(123.45, -1)
┌─floor(123.45, -1)─┐
│               120 │
└───────────────────┘

round

도입 버전: v1.1

값을 지정된 소수 자릿수 N까지 반올림합니다.

  • N > 0이면 소수점 오른쪽 자리를 기준으로 반올림합니다.
  • N < 0이면 소수점 왼쪽 자리를 기준으로 반올림합니다.
  • N = 0이면 가장 가까운 정수로 반올림합니다.

이 FUNCTION은 지정된 자릿수에서 가장 가까운 수를 반환합니다. 입력값이 두 인접한 수와의 거리가 동일한 경우, Float* 입력에 대해서는 banker's rounding을 사용하고 다른 숫자 타입(Decimal*)에 대해서는 0에서 멀어지는 방향으로 반올림합니다.

반올림으로 인해 오버플로우가 발생하는 경우(예: round(255, -1)), 결과는 정의되지 않습니다.

구문

round(x[, N])

인수

  • x — 반올림할 숫자입니다. Float* 또는 Decimal* 또는 (U)Int*
  • N — 선택 값입니다. 반올림할 소수점 자릿수입니다. 기본값은 0입니다. (U)Int*

반환 값

x와 동일한 타입의 반올림된 숫자를 반환합니다. Float* 또는 Decimal* 또는 (U)Int*

예시

Float 입력값

SELECT number / 2 AS x, round(x) FROM system.numbers LIMIT 3;
┌───x─┬─round(x)─┐
│   0 │        0 │
│ 0.5 │        0 │
│   1 │        1 │
└─────┴──────────┘

소수 입력

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

도입: v1.1

사람의 나이를 나타내는 숫자 값을 입력으로 받아 표준 연령 구간과 비교한 후, 해당 값이 속하는 구간의 최댓값 또는 최솟값을 반환합니다.

  • 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를 반환합니다.

문법

roundAge(num)

인수

  • age — 나이를 연 단위로 나타내는 숫자입니다. (U)Int* 또는 Float*

반환 값

age가 속하는 구간의 최댓값 또는 최솟값에 해당하는 나이를 반환합니다. UInt8

예시

사용 예시

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

도입 버전: v20.1

숫자를 지정된 소수 자리 N으로 반올림합니다. 반올림할 숫자가 두 수의 정확한 중간인 경우, 함수는 IEEE 754에서 부동 소수점 숫자의 기본 반올림 방식으로 정의된 「banker's rounding(은행가 반올림)」 방식을 사용합니다.

  • N > 0인 경우, 소수점 오른쪽 자리까지 반올림합니다.
  • N < 0인 경우, 소수점 왼쪽 자리까지 반올림합니다.
  • N = 0인 경우, 가장 가까운 정수로 반올림합니다.
참고
  • 반올림할 숫자가 두 수의 정확한 중간인 경우, 지정된 소수 자리에서 가장 가까운 짝수 숫자로 반올림합니다. 예: 3.54로 반올림되고, 2.52로 반올림됩니다.
  • round 함수는 부동 소수점 숫자에 대해 동일한 방식으로 반올림합니다.
  • roundBankers 함수는 정수에 대해서도 같은 방식으로 반올림합니다. 예: roundBankers(45, -1) = 40.
  • 그 외의 경우에는 함수를 사용하여 숫자를 가장 가까운 정수로 반올림합니다.
합계나 차감에 banker's rounding을 사용하십시오

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.

구문

roundBankers(x[, N])

인자

  • x — 반올림할 숫자입니다. (U)Int* 또는 Decimal* 또는 Float*
  • [, N] — 선택 사항입니다. 반올림할 소수점 이하 자릿수입니다. 기본값은 0입니다. (U)Int*

반환 값

banker's rounding(은행식 반올림) 방식으로 반올림된 값을 반환합니다. (U)Int* 또는 Decimal* 또는 Float*

예시

기본 사용법

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

도입 버전: v20.1

숫자를 지정한 배열의 요소 중 하나로 내림(하향 반올림)합니다. 값이 하한값보다 작으면 하한값을 반환합니다.

구문

roundDown(num, arr)

인수

반환 값

arr의 요소 중 하나로 내림된 숫자를 반환합니다. 값이 배열의 최솟값보다 작으면 배열의 최솟값을 반환합니다. (U)Int* 또는 Float*

예시

사용 예시

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

도입 버전: v1.1

숫자를 자주 사용되는 기간(duration) 값 집합 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000 중에서, 해당 숫자 이하이면서 가장 가까운 값으로 내립니다. 숫자가 1보다 작으면 0을 반환합니다.

구문

roundDuration(num)

인수

  • num — 일반적인 기간(Set) 값들 중 하나로 반올림할 숫자입니다. (U)Int* 또는 Float*

반환 값

num < 1인 경우 0을 반환합니다. 그렇지 않으면 다음 값 중 하나를 반환합니다: 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000. UInt16

예시

사용 예시

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

도입 버전: v1.1

수를 가장 가까운 (0 이상의 정수인) 2의 거듭제곱 값 중 원래 수보다 작거나 같은 값으로 내림합니다. 수가 1보다 작으면 0을 반환합니다.

구문

roundToExp2(num)

인자

반환값

num을 가장 가까운 (0 이상의 정수인) 2의 거듭제곱으로 내림한 값을 반환하며, num이 1보다 작으면 0을 반환합니다. (U)Int* 또는 Float*

예시

사용 예시

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

도입된 버전: v1.1

floor와 유사하지만, x의 절댓값 이하이면서 절댓값이 가장 큰 값으로 반올림한 숫자를 반환합니다.

구문

truncate(x[, N])

별칭: truncate

인수

  • x — 반올림할 값입니다. Float* 또는 Decimal* 또는 (U)Int*
  • N — 선택적 인수입니다. 반올림할 소수점 이하 자릿수입니다. 기본값은 0이며, 정수로 반올림함을 의미합니다. (U)Int*

반환 값

x와 동일한 타입의 반올림된 숫자를 반환합니다. Float* 또는 Decimal* 또는 (U)Int*

예제

기본 사용법

SELECT truncate(123.499, 1) AS res;
┌───res─┐
│ 123.4 │
└───────┘