他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

8.2. 通貨型

money型は貨幣金額を固定精度の小数点で格納します。 表 8.3を参照してください。 小数点精度はデータベースのlc_monetary設定で決定されます。この表が示すように範囲は小数点2桁を想定しています。 '$1,000.00'などの典型的な通貨書式の他、整数、浮動小数点リテラルなど様々な書式の入力を受け付けます。 出力形式は通常は後者となりますが、ロケールによって異なります。

表8.3 通貨型

型名格納サイズ説明範囲
money8バイト貨幣金額-92233720368547758.08 から +92233720368547758.07

このデータ型の出力はロケールにより変動しますので、lc_monetary設定が異なるデータベースにmoneyデータをロードする場合には動作しない可能性があります。 この問題を防ぐためには、ダンプを新しいデータベースにリストアする前に、lc_monetaryがダンプを行ったデータベースと同じまたは等価であることを確認してください。

numericintそしてbigint型はmoney型にキャストすることができます。real型やdouble precision型は最初にnumeric 型にキャストした後に行なう必要があります。以下に例を示します。

SELECT '12.34'::float8::numeric::money;

しかしこれは推奨されません。浮動小数点数値は丸め誤差の可能性がありますので貨幣を扱うために使用すべきではありません。

money型の値は精度を落とすことなくnumericにキャストすることができます。 他の型への変換では精度を落とす可能性があり、また2段階で行う必要があります。

SELECT '52093.89'::money::numeric::float8;

money型の値を整数型の値で除算すると、小数部分を0に切り捨てるように実行されます。 四捨五入した結果を得るためには、小数部分を持つ値で割り算するか、割り算を行う前にmoney型の値をnumeric型にキャストし、あとでmoney型に戻します。 (精度を落とすリスクを避けるため、後者の方が好ましいです。) money型の値を別のmoney型の値で除算すると、結果はdouble precision型(通貨ではなく純粋な数値)になります。 除算では通貨の単位は相殺されます。