かなめのロジック

フリーSEの雑記ブログ。ORACLEやPostgreSQL、情報セキュリティ、金融について主に書いています。

端数処理関数

time 2016/01/03

端数処理関数

ORACLEには端数処理関数がいくつかあります。似た機能の関数もあります。正しく使い分けられていますか?

sponsored link

TRUNC・ROUND

TRUNCは、端数の切捨てを行う関数です。
ROUNDは、端数を四捨五入を行う関数です。(銀行丸めではないので注意)

CEIL・FLOOR

CEILは、端数の切上げを行う関数です。負数の場合に注意、大きい方へ丸めます。
FLOORは、端数の切捨てを行う関数です。負数の場合に注意、小さい方へ丸めます。

TRUNC・ROUNDとCEIL・FLOORの違い

違いの1点目は、TRUNCとROUNDは、指定した桁位置で端数処理をすることが出来るのに対し、CEIL・FLOORは整数に丸めることしかできない点です。
TRUNCとROUNDの桁位置の指定は、2番目の引数で行います。0は整数に(デフォルト)、1は小数点以下1位に、-1は整数10の位に丸めることを意味します。

違いの2点目は、TRUNCとFLOORの違いです。指定した桁で丸められか否かという点以外に、負数の場合の扱いが異なります。
TRUNCは、指定した値を0に近い方へ丸めます。
FLOORは、指定した値を小さい方へ丸めます。

負数の場合のTRUNCとFLOORの違いやCEILの挙動は、特に注意が必要です。

まとめ

端数処理は金額等の重要な項目で使用することも多く、重い障害につながる可能性があります。
ぜひ覚えておきましょう。

関連

sponsored link

管理人

かなめ

フリーの業務系システムエンジニア。情報処理安全確保支援士。 ORACLEと金融と子育ての狭間で、元気に楽しくやってます。 [詳細]

管理人twitter

ブログ村



sponsored link