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.