PostgreSQL não define
round(double precision, integer)
. Por motivos @Mike Sherrill 'Cat Recall' explica nos comentários, a versão do round que leva uma precisão só está disponível para 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)
(No exemplo acima, observe que
float8
é apenas um alias abreviado para double precision
. Você pode ver que o PostgreSQL o está expandindo na saída). Você deve converter o valor a ser arredondado para
numeric
para usar a forma de dois argumentos de round
. Basta anexar ::numeric
para a conversão abreviada, como round(val::numeric,2)
. Se você estiver formatando para exibição ao usuário, não use
round
. Use to_char
(consulte:funções de formatação de tipo de dados no manual), que permite especificar um formato e fornece um text
resultado que não é afetado por qualquer estranheza que sua linguagem cliente possa fazer com numeric
valores. Por exemplo:regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char
arredondará os números para você como parte da formatação. O FM
prefix informa to_char
que você não quer nenhum preenchimento com espaços à esquerda.