PostgreSQL ne définit pas round(double precision, integer)
. Pour des raisons @Mike Sherrill 'Cat Recall' explique dans les commentaires, la version de round qui prend une précision n'est disponible que pour 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)
(Dans ce qui précède, notez que float8
est juste un alias abrégé pour double precision
. Vous pouvez voir que PostgreSQL le développe dans la sortie).
Vous devez convertir la valeur à arrondir en numeric
utiliser la forme à deux arguments de round
. Ajoutez simplement ::numeric
pour la version abrégée, comme round(val::numeric,2)
.
Si vous formatez pour l'affichage à l'utilisateur, n'utilisez pas round
. Utilisez to_char
(voir :fonctions de formatage des types de données dans le manuel), qui vous permet de spécifier un format et vous donne un text
résultat qui n'est pas affecté par les bizarreries que votre langage client pourrait faire avec numeric
valeurs. Par exemple :
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char
arrondira les nombres pour vous dans le cadre du formatage. La FM
le préfixe indique to_char
que vous ne voulez pas de remplissage avec des espaces de début.