PostgreSQL definerer ikke round(double precision, integer)
. Af årsager @Mike Sherrill 'Cat Recall' forklarer i kommentarerne, den version af runden, der tager en præcision, er kun tilgængelig for numeric
.
regress=> SELECT round( float8 '3.1415927', 2 );
ERROR: function round(double precision, integer) does not exist
regress=> \df *round*
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+--------+------------------+---------------------+--------
pg_catalog | dround | double precision | double precision | normal
pg_catalog | round | double precision | double precision | normal
pg_catalog | round | numeric | numeric | normal
pg_catalog | round | numeric | numeric, integer | normal
(4 rows)
regress=> SELECT round( CAST(float8 '3.1415927' as numeric), 2);
round
-------
3.14
(1 row)
(Bemærk i ovenstående, at float8
er kun et stenografisk alias for double precision
. Du kan se, at PostgreSQL udvider det i outputtet).
Du skal caste værdien for at blive afrundet til numeric
at bruge to-argumentformen round
. Du skal blot tilføje ::numeric
for stenografien cast, som round(val::numeric,2)
.
Hvis du formaterer til visning for brugeren, skal du ikke bruge round
. Brug to_char
(se:datatypeformateringsfunktioner i manualen), som lader dig specificere et format og giver dig en text
resultat, der ikke er påvirket af den underlighed dit klientsprog måtte gøre med numeric
værdier. For eksempel:
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char
vil afrunde tal for dig som en del af formateringen. FM
præfiks fortæller to_char
at du ikke ønsker noget polstring med mellemrum foran.