Anda pasti dapat menggunakan tipe presisi arbitrer numeric dengan presisi 5 dan skala 1, seperti komentar @Simon, tetapi tanpa kesalahan sintaks. Gunakan koma(, ) bukannya titik (. ) di pengubah tipe:
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
Tanda minus dan titik dalam literal string tidak dihitung terhadap digit signifikan maksimum yang diizinkan (precision ).
Jika Anda tidak perlu membatasi panjangnya, cukup gunakan numeric .
Jika Anda perlu menerapkan minimum dan maksimum, tambahkan batasan centang:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric menyimpan nomor Anda dengan tepat . Jika Anda tidak memerlukan presisi mutlak dan kesalahan pembulatan kecil tidak masalah, Anda juga dapat menggunakan salah satu jenis titik mengambang double precision (float8 ) atau real (float4 ).
Atau, karena Anda hanya mengizinkan satu digit desimal pecahan, Anda dapat mengalikannya dengan 10 dan menggunakan integer , yang akan menjadi penyimpanan paling efisien:4 byte, tanpa kesalahan pembulatan, dan pemrosesan tercepat. Cukup gunakan dan dokumentasikan nomornya dengan benar.
Detail untuk tipe numerik dalam manual.