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

반올림 함수

참고

아래 문서는 system.functions 시스템 테이블에서 자동 생성되었습니다

ceil

도입 버전: v1.1.0

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

구문

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 │
└─────────┘

음수 정밀도

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

floor

도입 버전: v1.1.0

반올림된 수가 1 / 10 * N의 배수이면서 x 이하인 값 중 가장 큰 값을 반환합니다. 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.0

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

  • N > 0이면 소수점 오른쪽 자릿수까지 반올림합니다.
  • N < 0이면 소수점 왼쪽 자릿수에서 반올림합니다.
  • N = 0이면 가장 가까운 정수로 반올림합니다.

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

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

구문

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 │
└─────┴──────────┘

소수 입력값

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

구문

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.0

숫자를 지정한 소수 자릿수 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.0

숫자를 지정된 배열의 요소 중 바로 아래에 위치한 값으로 내림합니다. 값이 하한보다 작으면 하한이 반환됩니다.

구문

roundDown(num, arr)

인수

반환 값

arr의 요소 중 하나로 내림(round down)된 숫자를 반환합니다. 값이 최솟값보다 작으면 최솟값을 반환합니다. (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.0

숫자를 자주 사용되는 기간 값으로 구성된 집합 1, 10, 30, 60, 120, 180, 240, 300, 600, 1200, 1800, 3600, 7200, 18000, 36000 중 현재 값보다 크지 않은 값 가운데 가장 가까운 값으로 내림합니다. 숫자가 1보다 작으면 0을 반환합니다.

구문

roundDuration(num)

인수

  • num — 공통적인 기간 값들의 집합 중 하나로 반올림할 숫자입니다. (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

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

구문

roundToExp2(num)

인수

반환 값

num이 1보다 작으면 0을, 그렇지 않으면 num을 가장 가까운 (0 이상의 정수인) 2의 거듭제곱 값으로 내림(round down)한 값을 반환합니다. (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.0

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 │
└───────┘