ラベル 基本機能 の投稿を表示しています。 すべての投稿を表示
ラベル 基本機能 の投稿を表示しています。 すべての投稿を表示

SQLで四捨五入

OracleのSQLにて少数点第4位にて四捨五入する方法を調べました。

四捨五入はROUND関数にて行います。
書式は、ROUND(値 ,小数桁)となります。

SELECT ROUND(1234.56789,3) FROM DUAL

この場合、1234.568と取得できます。

また少数点以下を四捨五入する場合は

SELECT ROUND(1234.56789) FROM DUAL

とします。1235と取得されます。

ついでに切り捨て、切り上げ方法も調べました。
切り捨ては、TRUNC(値 ,小数桁)です。

SELECT TRUNC(1234.56789,3) FROM DUAL

この場合、1234.567と取得できます。

小数桁を省略すると小数桁以下を切り捨てます。

切り上げについては、非公式ですがROUNDUPがありました。
書式はTRUNCと同じようですが、テストした環境Oracle9iでは使えませんでした。
次に見つけたのがCEILです。
切り上げと微妙に違い最小の整数を返す命令ですが少数点以下の切り上げには使えます。

SELECT CEIL(1234.56789) FROM DUAL

この場合、1235と取得できます。
但し負の値の場合、切り上げではなく切り捨てとなるので注意が必要です。


数値型

少数点以下の桁数の設定で不安だったので調べました。

数値型のデータ型として
固定少数点数としてNUMBER型
浮動小数点数としてBINARY_FLOAT型(単精度浮動小数点値)、
BINARY_DOUBLE型(倍精度小数点値)があります。

固定少数点数、浮動小数点数をWikiで調べると

固定少数点数

コンピュータにおける実数の近似値の表現方式。
固定小数点数では整数部分に用いるビット数と小数部分に用いるビット数を
あらかじめ固定して表現する。

浮動小数点数

コンピュータにおける実数の近似値の表現方式。小数点の位置が可変である。

と書かれていましたが、よくわかりません。
もう少し分かりやすく説明すると
固定少数点数は浮動小数点数に比べて表現できる値の範囲ははるかに狭いが、
情報落ちが起こらないことや高速に演算できることが利点で
浮動小数点数は誤差が発生しやすいが、大きな値や、逆に小さな値を表現できるかな。

今回は整数部9桁少数点3桁までなので固定少数点数のNUMBER型を使用しました。

書式はNUMBER(p,s)となります。
p:小数点以下も含んだ数値全体の桁数で最大38桁
s:小数点以下の桁数、省略した場合は0となります。有効範囲は-84~127です。


上記書式を考慮して
NUMBER(12,3)と設定しました。

少数点以下桁数の精度を超える値をセットすると丸められます。
NUMBER(12,3)に123.45678をセットすると123.457となります。

また、少数点以下の桁数にマイナスをセットした場合
NUMBER(12,-2)に1234567をセットすると1234600となります。