U kunt zeker het willekeurige precisietype numeric . gebruiken met een precisie van 5 en een schaal van 1, net zoals @Simon opmerkte, maar zonder de syntaxisfout. Gebruik een komma(, ) in plaats van de punt (. ) in de typemodifier:
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
Het minteken en de punt in de letterlijke tekenreeks tellen niet mee voor het toegestane maximum van significante cijfers (precision ).
Als u de lengte niet hoeft te beperken, gebruikt u gewoon numeric .
Als je minimum en maximum moet afdwingen, voeg dan een controlebeperking toe:
CHECK (nr_column BETWEEN -999.9 AND 9999.9)
numeric slaat uw nummer exact op . Als je de absolute precisie niet nodig hebt en kleine afrondingsfouten geen probleem zijn, kun je ook een van de drijvende-kommatypes gebruiken double precision (float8 ) of real (float4 ).
Of, aangezien u slechts één decimaal cijfer achter de komma toestaat, kunt u vermenigvuldigen met 10 en integer gebruiken , wat de meest efficiënte opslag zou zijn:4 bytes, geen afrondingsfouten en snelste verwerking. Gebruik en documenteer het nummer gewoon goed.
Details voor numerieke typen in de handleiding.