본문으로 건너뛰기
최종 수정: 에

ROUND_BANKERS

설명​

은행가 반올림 방식으로 x를 반올림하여 소수점 이하 d자리까지 유지합니다. d의 기본값은 0입니다.

d가 음수이면 소수점 왼쪽의 |d|자리 숫자를 0으로 설정합니다.

x 또는 d가 null이면 null을 반환합니다.

d가 컬럼을 나타내고 첫 번째 매개변수가 Decimal 타입이면 결과 Decimal의 소수점 이하 자릿수는 입력 Decimal과 같습니다.

은행가 반올림 알고리즘의 규칙에 따라 지정된 소수 자릿수로 반올림할 때는 다음과 같이 처리합니다.

  • 반올림할 숫자가 5이고 그 뒤에 영이 아닌 숫자가 없으면 바로 앞의 숫자를 확인합니다.

    • 앞의 숫자가 짝수이면 5를 그대로 버립니다.
    • 앞의 숫자가 홀수이면 올림합니다.
  • 반올림할 숫자가 5보다 크거나 그 뒤에 영이 아닌 숫자가 있으면 일반적인 반올림 규칙을 적용합니다. 해당 숫자가 5 이상이면 올림하고, 그렇지 않으면 버립니다.

예를 들면 다음과 같습니다.

  • 값이 2.5이면 5 앞의 숫자 2가 짝수이므로 반올림 결과는 2입니다.

  • 값이 3.5이면 5 앞의 숫자 3이 홀수이므로 반올림 결과는 4입니다.

  • 값이 2.51이면 5 뒤의 숫자가 0이 아니므로 바로 올림하여 결과는 3입니다.

구문​

ROUND_BANKERS(<x> [ , <d>])

매개변수​

매개변수설명
<x>반올림할 숫자
<d>선택 사항입니다. 반올림하여 유지할 소수점 이하 자릿수이며, 기본값은 0입니다.

반환값​

정수 또는 부동소수점 수를 반환합니다.

  • 기본적으로 매개변수 d = 0이면 은행가 반올림 알고리즘으로 x를 계산한 정수를 반환합니다.

  • d가 음수이면 소수점 왼쪽 첫 번째 자릿수가 0인 정수를 반환합니다.

  • x와 d가 모두 NULL이면 NULL을 반환합니다.

  • d가 컬럼을 나타내고 x가 Decimal 타입이면 동일한 정밀도의 부동소수점 수를 반환합니다.

예제​

select round_bankers(0.4);
+--------------------+
| round_bankers(0.4) |
+--------------------+
| 0 |
+--------------------+
select round_bankers(-3.5);
+---------------------+
| round_bankers(-3.5) |
+---------------------+
| -4 |
+---------------------+
select round_bankers(-3.4);
+---------------------+
| round_bankers(-3.4) |
+---------------------+
| -3 |
+---------------------+
select round_bankers(10.755, 2);
+--------------------------+
| round_bankers(10.755, 2) |
+--------------------------+
| 10.76 |
+--------------------------+
select round_bankers(10.745, 2);
+--------------------------+
| round_bankers(10.745, 2) |
+--------------------------+
| 10.74 |
+--------------------------+
select round_bankers(1667.2725, -2);
+------------------------------+
| round_bankers(1667.2725, -2) |
+------------------------------+
| 1700 |
+------------------------------+
SELECT number
, round_bankers(number * 2.5, number - 1) AS rb_decimal_column
, round_bankers(number * 2.5, 0) AS rb_decimal_literal
, round_bankers(cast(number * 2.5 AS DOUBLE), number - 1) AS rb_double_column
, round_bankers(cast(number * 2.5 AS DOUBLE), 0) AS rb_double_literal
FROM test_enhanced_round
WHERE rid = 1;
+--------+-------------------+--------------------+------------------+-------------------+
| number | rb_decimal_column | rb_decimal_literal | rb_double_column | rb_double_literal |
+--------+-------------------+--------------------+------------------+-------------------+
| 1 | 2.0 | 2 | 2 | 2 |
+--------+-------------------+--------------------+------------------+-------------------+