PostgreSQL definierar inte round(double precision, integer)
. Av anledningar @Mike Sherrill 'Cat Recall' förklarar i kommentarerna, versionen av rundan som tar en precision är endast tillgänglig för 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)
(Observera att float8
är bara ett stenografisk alias för double precision
. Du kan se att PostgreSQL expanderar den i utdata).
Du måste casta värdet för att avrundas till numeric
att använda tvåargumentformen round
. Lägg bara till ::numeric
för stenografin, som round(val::numeric,2)
.
Om du formaterar för visning för användaren, använd inte round
. Använd to_char
(se:formateringsfunktioner för datatyp i manualen), som låter dig specificera ett format och ger dig en text
resultat som inte påverkas av de konstigheter ditt klientspråk än kan göra med numeric
värden. Till exempel:
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char
kommer att avrunda siffror för dig som en del av formateringen. FM
prefix talar om för to_char
att du inte vill ha någon utfyllnad med inledande mellanslag.