PostgreSQLはround(double precision, integer)
を定義していません 。理由@MikeSherrill'Cat Recall' コメントで説明されているように、精度をとるラウンドのバージョンはnumeric
でのみ利用可能です 。
regress=> SELECT round( float8 '3.1415927', 2 );
ERROR: function round(double precision, integer) does not exist
regress=> \df *round*
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+--------+------------------+---------------------+--------
pg_catalog | dround | double precision | double precision | normal
pg_catalog | round | double precision | double precision | normal
pg_catalog | round | numeric | numeric | normal
pg_catalog | round | numeric | numeric, integer | normal
(4 rows)
regress=> SELECT round( CAST(float8 '3.1415927' as numeric), 2);
round
-------
3.14
(1 row)
(上記では、float8
に注意してください double precision
の単なる省略形です 。 PostgreSQLが出力でそれを拡張していることがわかります。
丸める値をnumeric
にキャストする必要があります round
の2つの引数形式を使用するには 。 ::numeric
を追加するだけです round(val::numeric,2)
のような速記キャストの場合 。
ユーザーに表示するためにフォーマットする場合は、round
を使用しないでください 。 to_char
を使用する (マニュアルのデータ型フォーマット関数を参照)。これにより、フォーマットを指定し、text
を取得できます。 クライアント言語がnumeric
で行う可能性のある奇妙さの影響を受けない結果 値。例:
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char
フォーマットの一部として数値を丸めます。 FM
プレフィックスはto_char
に通知します 先頭にスペースを入れたくないこと。