2019の13日目の記事です。今回は、PostgreSQLが提供するround関数について取り上げます。round()は、PostgreSQL日本語ドキュメントでは「最も近い整数への丸め」と説明されていて、数値の四捨五入に使われている方も多いのではないでしょうか。実際に、PostgreSQLバージョン12で、1.0から3.0までのNUMERIC型の値を0.1刻みでround()に渡すと、下記のとおり四捨五入していることを確認できます。PRECISION型の値を0.1刻みでround()に渡すと、以下のとおりです。PRECISION型のときは2と異なっています。(偶数への丸め、五捨五入)と呼ばれるものです。PRECISION)は銀行丸めを行います。PRECISION型でround()に渡すと、結果の違いがよく分ります。rows)以上のとおり、PostgreSQLが提供するround関数は、引数のデータ型によって挙動が変わるため、取り扱いには注意が必要です。既存システムでround関数を使っている場合は、期待どおりの実行結果が得られているか確認したほうがよいかもしれません。round()の実装round(NUMERIC)は、PostgreSQLの内部関数であるnumeric_roundを呼び出して、PostgreSQLで実装されている四捨五入のロジックを実行します。PRECISION)は、内部関数のdroundを呼び出して、その関数内ではrint()を実行するだけです。rint()は、値を整数に丸めるライブラリコールです。rint()がどのように丸めるか(丸めモード)は、ライブラリコールのfesetround()で設定変更可能です。PostgreSQLは、fesetround()による丸めモードの変更は行なっていないため、rint()はデフォルトの丸めモード1である銀行丸めに従って値を丸めます。小数点付きの値を指定すると、値はrint()により丸められます。値の銀行丸め結果の整数が、パラメータの設定値になります。row)OSや環境によっては、デフォルトの丸めモードが銀行丸めでない可能性があります。upLoginユーザーは見つかりませんでした。