카테고리:

숫자 함수 (반올림 및 잘림)

ROUND

input_expr 에 대해 반올림된 값을 반환합니다.

참고 항목:

CEIL , FLOOR , TRUNCATE , TRUNC

구문

ROUND( <input_expr> [ , <scale_expr> [ , <rounding_mode> ] ] )
Copy
ROUND( EXPR => <input_expr> ,
       SCALE => <scale_expr>
       [ , ROUNDING_MODE => <rounding_mode>  ] )
Copy

인자

필수:

input_expr . OR . EXPR => input_expr

연산할 값 또는 식입니다. 데이터 타입은 FLOAT 또는 NUMBER와 같은 숫자 데이터 타입 중 하나여야 합니다.

EXPR => 로 명명된 인자를 지정하는 경우 SCALE => 로 명명된 인자도 지정해야 합니다.

선택 사항:

scale_expr . OR . SCALE => scale_expr

출력이 소수점 뒤에 포함해야 하는 자릿수입니다. 식은 -38에서 +38 사이의 정수로 평가되어야 합니다.

기본 scale_expr 은 0이며, 이는 함수가 소수점 이하의 모든 숫자를 제거함을 의미합니다.

음수에 대한 정보는 아래의 사용법 노트를 참조하십시오.

SCALE => 로 명명된 인자를 지정하는 경우 EXPR => 를 이전에 명명된 인자로 지정해야 합니다.

rounding_mode . OR . ROUNDING_MODE => rounding_mode

사용할 반올림 모드입니다. 다음 값 중 하나를 지정할 수 있습니다.

기본값: 'HALF_AWAY_FROM_ZERO'

ROUNDING_MODE => 로 명명된 인자를 지정하는 경우 EXPR =>SCALE => 를 모두 앞서 명명된 인자로 지정해야 합니다.

참고

rounding_mode 인자에 대해 둘 중 어느 한 값을 지정하는 경우 input_expr 의 데이터 타입은 고정 소수점 숫자의 데이터 타입 중 하나 여야 합니다.

부동 소수점 숫자의 데이터 타입 (예: FLOAT)은 이 인자에서 지원되지 않습니다.

반환

반환 형식은 입력 형식을 기반으로 합니다.

  • 입력 식이 FLOAT이면 반환되는 타입도 FLOAT입니다.

  • 입력 식이 NUMBER이면 반환되는 타입도 NUMBER입니다.

    • 입력 소수 자릿수가 상수인 경우:

      • 입력 소수 자릿수가 양수인 경우 반환되는 타입은 입력 소수 자릿수과 동일한 소수 자릿수를 가지며 가능한 모든 결과를 포함할 수 있을 만큼 큰 전체 자릿수를 가집니다.

      • 입력 소수 자릿수가 음수인 경우 반환되는 타입의 소수 자릿수는 0입니다.

    • 입력 소수 자릿수가 상수가 아닌 경우 반환되는 타입의 소수 자릿수는 입력 식의 소수 자릿수와 동일합니다.

소수 자릿수가 0이면 값은 사실상 INTEGER입니다.

예:

  • ROUND(3.14::FLOAT, 1)에 의해 반환되는 데이터 타입은 FLOAT입니다.

  • ROUND(3.14, 1)에 의해 반환되는 NUMBER는 소수 자릿수가 1이고 전체 자릿수는 3 이상입니다.

  • ROUND(-9.99, 0)에 의해 반환되는 NUMBER는 소수 자릿수가 0이고 전체 자릿수는 2 이상입니다.

  • ROUND(33.33, -1)에 의해 반환되는 NUMBER는 소수 자릿수가 0이고 전체 자릿수는 3 이상입니다.

사용법 노트

  • 이름 또는 위치로 모든 인자를 지정해야 합니다. 일부 인자는 이름으로, 다른 인자는 위치로 지정할 수는 없습니다.

    이름으로 인자를 지정할 때 인자 이름 주위에 큰따옴표를 사용할 수 없습니다.

  • scale_expr 이 음수인 경우, 숫자를 조정할 소수점 앞의 자릿수를 지정합니다. 예를 들어, 스케일이 -2이면 결과는 100의 배수입니다.

  • scale_expr 이 입력 식보다 크면 함수는 아무런 영향을 미치지 않습니다.

  • input_expr 또는 scale_expr 이 NULL이면 결과는 NULL입니다.

  • 기본적으로, 소수점 이하 자릿수에서 반올림할 때 하프 포인트(0.5, 1.5, 2.5 등)는 0에서 멀어지는 방향으로 반올림됩니다. 예를 들어, -0.5는 -1.0으로 반올림됩니다.

    반올림 모드를 변경하여 값을 가까운 짝수로 반올림 하려면(예: -0.5를 0으로 반올림) rounding_mode 인자에 대해 'HALF_TO_EVEN' 을 전달하십시오.

    참고

    rounding_mode 인자를 지정하는 경우 input_expr 인자의 데이터 타입은 고정 소수점 숫자의 데이터 타입 중 하나 여야 합니다.

  • 부동 소수점 숫자는 대략적인 값입니다. 부동 소수점 숫자는 예상대로 반올림되지 않을 수 있습니다.

  • 반올림으로 인해 데이터 타입의 값 범위를 벗어나면 함수가 오류를 반환합니다.

이 첫 번째 예는 기본 소수점 자릿수(0)를 사용하여 ROUND 의 간단한 사용법을 보여줍니다.

SELECT ROUND(135.135), ROUND(-975.975);
+----------------+-----------------+
| ROUND(135.135) | ROUND(-975.975) |
|----------------+-----------------|
|            135 |            -976 |
+----------------+-----------------+
Copy

다음 예에서는 스케일 매개 변수에 대해 값 범위를 사용합니다.

SELECT n, scale, ROUND(n, scale)
  FROM test_ceiling
  ORDER BY n, scale;
+----------+-------+-----------------+
|        N | SCALE | ROUND(N, SCALE) |
|----------+-------+-----------------|
| -975.975 |    -1 |        -980     |
| -975.975 |     0 |        -976     |
| -975.975 |     2 |        -975.98  |
|  135.135 |    -2 |         100     |
|  135.135 |     0 |         135     |
|  135.135 |     1 |         135.1   |
|  135.135 |     3 |         135.135 |
|  135.135 |    50 |         135.135 |
|  135.135 |  NULL |            NULL |
+----------+-------+-----------------+
Copy

다음 두 예제에서는 기본 반올림 모드('HALF_AWAY_FROM_ZERO')와 반올림 모드 'HALF_TO_EVEN' 사용의 차이점을 보여줍니다. 두 예제에서는 모두 ROUND 함수를 두 번 호출하는데, 먼저 기본 반올림 동작으로 호출한 다음 'HALF_TO_EVEN' 으로 호출합니다.

첫 번째 예제에서는 2.5의 양수 입력값을 사용합니다.

SELECT ROUND(2.5, 0), ROUND(2.5, 0, 'HALF_TO_EVEN');
Copy
+---------------+-------------------------------+
| ROUND(2.5, 0) | ROUND(2.5, 0, 'HALF_TO_EVEN') |
|---------------+-------------------------------|
|             3 |                             2 |
+---------------+-------------------------------+

두 번째 예제에서는 -2.5의 음수 입력값을 사용합니다.

SELECT ROUND(-2.5, 0), ROUND(2.5, 0, 'HALF_TO_EVEN');
Copy
+---------------+--------------------------------+
| ROUND(2.5, 0) | ROUND(-2.5, 0, 'HALF_TO_EVEN') |
|---------------+--------------------------------|
|            -3 |                             -2 |
+---------------+--------------------------------+

다음 두 예제에서는 이름으로 함수에 대한 인자를 지정하는 방법을 보여줍니다.

SELECT ROUND(
  EXPR => -2.5,
  SCALE => 0);
Copy
+---------------------------------+
| ROUND(EXPR => -2.5, SCALE => 0) |
|---------------------------------|
|                              -3 |
+---------------------------------+
SELECT ROUND(
  EXPR => -2.5,
  SCALE => 0,
  ROUNDING_MODE => 'HALF_TO_EVEN');
Copy
+------------------------------------------------------------------+
| ROUND(EXPR => -2.5, SCALE => 0, ROUNDING_MODE => 'HALF_TO_EVEN') |
|------------------------------------------------------------------|
|                                                               -2 |
+------------------------------------------------------------------+

다음 예는 FLOAT 값이 항상 정확하게 저장되지는 않는다는 것을 보여줍니다. 아래에서 볼 수 있듯이, 어떤 경우에는 .005가 .01로 반올림되고 다른 경우에는 0으로 반올림됩니다. 차이점은 반올림에 있지 않습니다. 차이점은 실제로, 부동 소수점 숫자의 기본 표현에 있습니다. 1.005는 1.005보다 약간 작은 숫자로 저장됩니다(약 1.004999). 그러나 DECIMAL 값은 정확한 숫자로 저장되며, 모든 경우에 예상대로 .01로 반올림됩니다.

테이블을 만들고 로딩합니다.

CREATE OR REPLACE TEMP TABLE rnd1(f float, d DECIMAL(10, 3));
INSERT INTO rnd1 (f, d) VALUES
      ( -10.005,  -10.005),
      (  -1.005,   -1.005),
      (   1.005,    1.005),
      (  10.005,   10.005)
      ;
Copy

반올림된 FLOAT 값과 반올림된 DECIMAL 값 간의 차이의 예를 보여줍니다.

select f, round(f, 2), 
       d, round(d, 2) 
    from rnd1 
    order by 1;
+---------+-------------+---------+-------------+
|       F | ROUND(F, 2) |       D | ROUND(D, 2) |
|---------+-------------+---------+-------------|
| -10.005 |      -10.01 | -10.005 |      -10.01 |
|  -1.005 |       -1    |  -1.005 |       -1.01 |
|   1.005 |        1    |   1.005 |        1.01 |
|  10.005 |       10.01 |  10.005 |       10.01 |
+---------+-------------+---------+-------------+
Copy