Bạn chắc chắn có thể sử dụng kiểu chính xác tùy ý numeric
với độ chính xác là 5 và tỷ lệ là 1, giống như @Simon đã nhận xét, nhưng không có lỗi cú pháp. Sử dụng dấu phẩy (,
) thay vì dấu chấm (.
) trong công cụ sửa đổi loại:
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
Dấu trừ và dấu chấm trong chuỗi ký tự không tính vào số chữ số có nghĩa tối đa được phép (precision
).
Nếu bạn không cần hạn chế độ dài, chỉ cần sử dụng numeric
.
Nếu bạn cần thực thi tối thiểu và tối đa, hãy thêm ràng buộc kiểm tra:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric
lưu trữ số của bạn chính xác . Nếu bạn không cần độ chính xác tuyệt đối và lỗi làm tròn nhỏ không thành vấn đề, bạn cũng có thể sử dụng một trong các loại dấu phẩy động double precision
(float8
) hoặc real
(float4
).
Hoặc, vì bạn chỉ cho phép một chữ số thập phân phân số duy nhất, bạn có thể nhân với 10 và sử dụng integer
, đó sẽ là bộ nhớ hiệu quả nhất:4 byte, không có lỗi làm tròn và xử lý nhanh nhất. Chỉ cần sử dụng và ghi lại số đúng cách.
Thông tin chi tiết về các kiểu số trong sách hướng dẫn.