メインコンテンツまでスキップ
バージョン: 4.x

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になります。

Syntax

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

パラメータ

Parameterデスクリプション
<x>丸める数値
<d>オプション。丸める小数点以下の桁数。デフォルト値は0。

Return value

整数または浮動小数点数を返します:

  • デフォルトでは、パラメータd = 0の場合、banker's rounding algorithmを使用して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 |
+--------+-------------------+--------------------+------------------+-------------------+