- カテゴリ:
数値関数 (四捨五入と切り捨て)
ROUND¶
入力式
の四捨五入された値を返します。
- こちらもご参照ください:
構文¶
ROUND( <input_expr> [, <scale_expr> ] )
引数¶
入力式
操作する値または式です。データ型は、 FLOAT や NUMBERなどの数値データ型のいずれかでなければなりません。
スケール式
出力の小数点の後に含める桁数です。式は-38~+38の整数に評価される必要があります。
デフォルトでは、
スケール式
はゼロになっています。これは、関数が小数点以下のすべての数字を削除することを意味します。負の数については、以下の使用上の注意をご参照ください。
戻り値¶
戻り値の型は入力型に基づいています。
入力が FLOAT の場合、戻り値のデータ型は FLOAT です。
入力が NUMBER の場合、戻り値のデータ型は NUMBER です。
入力スケールがゼロ以上の場合、出力スケールは通常、入力スケールと一致します。
入力スケールが負の場合、出力スケールは0です。
- 例:
ROUND(3.14::NUMBER(4, 1), 1) によって返されるデータ型は NUMBER(4, 1) です。
ROUND(3.14::NUMBER(4, 0), 0) によって返されるデータ型は NUMBER(4, 0) です。
スケールがゼロの場合、値は事実上整数になります。
使用上の注意¶
スケール式
が負の場合、数値を調整する小数点の 前 の場所の数を指定します。例えば、スケールが-2の場合、結果は100の倍数になります。スケール式
が入力式のスケールよりも大きい場合、関数は効果がありません。入力式
またはスケール式
のいずれかが NULL の場合、結果は NULLです。小数の0.5は四捨五入されます。例えば、-0.5は-1.0に四捨五入されます。
浮動小数点数はおおよその値です。浮動小数点数は、期待どおりに丸められない場合があります。
丸めにより数値がデータ型の値の範囲外になった場合は、エラーが返されます。
例¶
この最初の例は、デフォルトの小数点以下の桁数(0)を持つ ROUND
の簡単な例を示しています。
SELECT ROUND(135.135), ROUND(-975.975); +----------------+-----------------+ | ROUND(135.135) | ROUND(-975.975) | |----------------+-----------------| | 135 | -976 | +----------------+-----------------+
次の例は、スケールパラメーターに値の範囲を使用しています。
SELECT n, scale, ROUND(n, scale) FROM test_ceiling ORDER BY n, scale; +----------+-------+-----------------+ | N | SCALE | ROUND(N, SCALE) | |----------+-------+-----------------| | -975.975 | -1 | -980 | | -975.975 | 0 | -976 | | -975.975 | 2 | -975.98 | | 135.135 | -2 | 100 | | 135.135 | 0 | 135 | | 135.135 | 1 | 135.1 | | 135.135 | 3 | 135.135 | | 135.135 | 50 | 135.135 | | 135.135 | NULL | NULL | +----------+-------+-----------------+
次の例は、 FLOAT 値が常に正確に保存されるわけではないことを示しています。以下に示すように、.005は.01に四捨五入される場合もあれば、0に四捨五入される場合もあります。四捨五入に違いはありません。実際の違いは、浮動小数点数の基になる表現にあります。1.005は、1.005よりもわずかに小さい数(約1.004999)として保存されます。ただし、 DECIMAL 値は正確な数値として保存され、すべての場合に期待されるように.01に四捨五入されます。
テーブルを作成してロードします。
CREATE OR REPLACE TEMP TABLE rnd1(f float, d DECIMAL(10, 3)); INSERT INTO rnd1 (f, d) VALUES ( -10.005, -10.005), ( -1.005, -1.005), ( 1.005, 1.005), ( 10.005, 10.005) ;四捨五入された FLOAT 値と、四捨五入された DECIMAL 値の違いの例を示します。
select f, round(f, 2), d, round(d, 2) from rnd1 order by 1; +---------+-------------+---------+-------------+ | F | ROUND(F, 2) | D | ROUND(D, 2) | |---------+-------------+---------+-------------| | -10.005 | -10.01 | -10.005 | -10.01 | | -1.005 | -1 | -1.005 | -1.01 | | 1.005 | 1 | 1.005 | 1.01 | | 10.005 | 10.01 | 10.005 | 10.01 | +---------+-------------+---------+-------------+