確かに任意精度のタイプnumeric
を使用できます @Simonがコメントしたように、精度は5、スケールは1ですが、構文エラーはありません。カンマを使用する(,
)ドットの代わりに(.
)タイプ修飾子内:
SELECT numeric(5,1) '-999.9' AS nr_lower
, numeric(5,1) '9999.9' AS nr_upper;
nr_lower | nr_upper
----------+----------
-999.9 | 9999.9
文字列リテラルのマイナス記号とドットは、許可されている有効数字の最大値(precision
)にはカウントされません。 )。
長さを制限する必要がない場合は、numeric
を使用してください。 。
最小値と最大値を適用する必要がある場合は、チェック制約を追加します。
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric
番号を正確に保存します 。絶対精度が不要で、小さな丸め誤差が問題ない場合は、浮動小数点型の1つdouble precision
を使用することもできます。 (float8
)またはreal
(float4
。
または、小数点以下1桁しか許可されないため、10を掛けて、integer
を使用できます。 、これが最も効率的なストレージになります。4バイト、丸め誤差がなく、処理が最速です。番号を適切に使用して文書化するだけです。
マニュアルの数値タイプの詳細。