ROUND_BANKERS
説明
banker's roundingメソッドを使用してxを丸め、d桁の小数点以下を保持します。dのデフォルト値は0です。
dが負の場合、小数点の左側の|d|桁が0に設定されます。
xまたはdがnullの場合、nullを返します。
dが列を表し、最初のパラメータがDecimal型の場合、結果のDecimalは入力のDecimalと同じ小数点以下の桁数を持ちます。
banker's roundingアルゴリズムの規則によると、指定された小数点以下の桁に丸める際:
-
丸める桁が5であり、その後に他の非ゼロの桁がない場合、直前の桁がチェックされます:
- 直前の桁が偶数の場合、5は単純に削除されます。
- 直前の桁が奇数の場合、数値は切り上げられます。
-
丸める桁が5より大きいか、その後に非ゼロの桁がある場合、従来の丸め規則が適用されます:桁が5以上の場合は切り上げ、そうでない場合は切り下げです。
例:
-
値2.5の場合、5の前の桁2が偶数のため、結果は2に丸められます。
-
値3.5の場合、5の前の桁3が奇数のため、結果は4に丸められます。
-
値2.51の場合、5の後の桁が0でないため、直接切り上げられ、結果は3になります。
構文
ROUND_BANKERS(<x> [ , <d>])
パラメータ
| Parameter | デスクリプション |
|---|---|
<x> | 四捨五入する数値 |
<d> | オプション、四捨五入する小数点以下の桁数。デフォルト値は0 |
Return value
整数または浮動小数点数を返します:
-
デフォルトでは、パラメータ d = 0 の場合、banker's roundingアルゴリズムを使用してxを計算した結果の整数を返します。
-
dが負の値の場合、小数点の左側の最初の桁が0となる整数を返します。
-
xとdの両方がNULLの場合、NULLを返します。
-
dが列を表し、xがDecimal型の場合、同じ精度の浮動小数点数を返します。
Example
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 |
+--------+-------------------+--------------------+------------------+-------------------+