ROUND 関数

ROUND 数値関数は、提供された値を指定の位取りで丸めます。

構文

注:
  1. MODE を指定しない場合は、ROUND_HALF_EVEN の値が使用されます。

precision が正の数なら、source_number は小数点以下 precision 桁で四捨五入されます。precision が負の場合の結果は、source_number の小数点の上 [precision の絶対値] 桁より下を四捨五入した結果です。

source_number には、任意の組み込み数値データ・タイプを指定できます。precision は整数でなければなりません。 結果は、source_number が NULL でない限り、source_number パラメーターと同じデータ・タイプになります。NULL の場合、結果も NULL になります。

これは、関数の結果が次のようになることを意味します。
  • source_number が INTEGER の場合、INTEGER。
  • source_number が FLOAT の場合、FLOAT。
  • source_number が DECIMAL の場合、DECIMAL。
丸めを行う際は、RoundingMode が指定されない限り、デフォルトで銀行型 または half-even symmetric 丸め規則が使用されます。

RoundingMode

RoundingMode は、以下のいずれかの値をとることができます。
ROUND_UP
非ゼロ方向に丸めます。常に、廃棄するゼロではない小数の前の桁を増やします。 この丸め方式では、計算値の絶対値が小さくなることはありません。
ROUND_DOWN
ゼロ方向に丸めます。廃棄する小数の前の桁を増やさない、つまり切り捨てです。 この丸め方式では、計算値の絶対値が大きくなることはありません。
ROUND_CEILING
正の無限大方向に丸めます。小数部が正のときの動作は ROUND_UP、負のときの動作は ROUND_DOWN です。この丸め方式では、計算値が小さくなることはありません。
ROUND_FLOOR
負の無限大方向に丸めます。小数部が正のときの動作は ROUND_DOWN、負のときの動作は ROUND_UP です。この丸め方式では、計算値が大きくなることはありません。
ROUND_HALF_UP
「最も近い値」の方に丸めます。ただし、両側の近さが同じ場合は、ROUND UP します。 廃棄される小数部が 0.5 以上のときは ROUND_UP の動作、それ未満のときは ROUND_DOWN の動作をします。これは、一般的に学校で教えられる丸め方式 (四捨五入) と同じです。
ROUND_HALF_DOWN
「最も近い値」の方に丸めます。ただし、両側の近さが同じ場合は、ROUND DOWN します。 廃棄される小数部が 0.5 よりも大きいときは ROUND_UP の動作、それ以下のときは ROUND_DOWN の動作をします。
ROUND_HALF_EVEN
「最も近い値」の方に丸めます。ただし、両側の近さが同じ場合は、偶数の側に丸めます。 廃棄される小数の左の桁が奇数のときは ROUND_HALF_UP の動作、偶数のときは ROUND_HALF_DOWN の動作をします。一連の計算に対して繰り返し適用されたときに累積の誤差が一番小さいのはこの丸め方式です。この方式は、銀行型丸めと呼ばれることもあります。
以下の表は、精度ゼロで様々な丸め方式を使用した場合の丸め操作をまとめたものです。
入力数値 ROUND UP ROUND DOWN ROUND CEILING ROUND FLOOR ROUND HALF UP ROUND HALF DOWN ROUND HALF EVEN
5.5 6 5 6 5 6 5 6
2.5 3 2 3 2 3 2 2
1.6 2 1 2 1 2 2 2
1.1 2 1 2 1 1 1 1
1.0 1 1 1 1 1 1 1
-1.0 -1 -1 -1 -1 -1 -1 -1
-1.1 -2 -1 -1 -2 -1 -1 -1
-1.6 -2 -1 -1 -2 -2 -2 -2
-2.5 -3 -2 -2 -3 -3 -2 -2
-5.5 -6 -5 -5 -6 -6 -5 -6
デフォルトの丸め方式 (ROUND_HALF_EVEN) を使用する例
ROUND(27.75, 2)
27.75 が戻ります。
ROUND(27.75, 1)
27.8 が戻ります。
ROUND(27.75, 0)
28 が戻ります。
ROUND(27.75, -1)
30 が戻ります。
精度ゼロで丸め方式を使用する例
ROUND(5.5, 0 MODE ROUND_UP);
6 が戻ります。
ROUND(5.5, 0 MODE ROUND_DOWN);
5 が戻ります。
ROUND(5.5, 0 MODE ROUND_CEILING);
6 が戻ります。
ROUND(5.5, 0 MODE ROUND_FLOOR);
5 が戻ります。
ROUND(5.5, 0 MODE ROUND_HALF_UP);
6 が戻ります。
ROUND(5.5, 0 MODE ROUND_HALF_DOWN);
5 が戻ります。
ROUND(5.5, 0 MODE ROUND_HALF_EVEN);
6 が戻ります。
ROUND(2.5, 0 MODE ROUND_UP);
3 が戻ります。
ROUND(2.5, 0 MODE ROUND_DOWN);
2 が戻ります。
ROUND(2.5, 0 MODE ROUND_CEILING);
3 が戻ります。
ROUND(2.5, 0 MODE ROUND_FLOOR);
2 が戻ります。
ROUND(2.5, 0 MODE ROUND_HALF_UP);
3 が戻ります。
ROUND(2.5, 0 MODE ROUND_HALF_DOWN);
2 が戻ります。
ROUND(2.5, 0 MODE ROUND_HALF_EVEN);
3 が戻ります。

可能な場合、位取りは与えられた値に変更されます。結果を指定された位取りで表現できない場合、INFINITY です。

関連概念
ESQL の概要
関連タスク
ESQL の開発
関連資料
構文図: 使用可能なタイプ
ESQL 数値関数
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック

Copyright IBM Corporation 1999, 2009Copyright IBM Corporation 1999, 2009.
最終更新 : 2009-02-20 12:44:04

ak05380_