に最終更新
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 |
+--------+-------------------+--------------------+------------------+-------------------+