PostgreSQL no define round(double precision, integer)
. Por razones @Mike Sherrill 'Cat Recall' explica en los comentarios, la versión de ronda que toma una precisión solo está disponible 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)
(En lo anterior, tenga en cuenta que float8
es solo un alias abreviado para double precision
. Puede ver que PostgreSQL lo está expandiendo en la salida).
Debe convertir el valor para redondearlo a numeric
para usar la forma de dos argumentos de round
. Simplemente agregue ::numeric
para la conversión abreviada, como round(val::numeric,2)
.
Si está formateando para mostrar al usuario, no use round
. Usa to_char
(ver:funciones de formato de tipo de datos en el manual), que le permite especificar un formato y le da un text
resultado que no se ve afectado por las rarezas que el lenguaje de su cliente pueda hacer con numeric
valores. Por ejemplo:
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char
redondeará los números por usted como parte del formato. La FM
el prefijo le dice a to_char
que no desea ningún relleno con espacios iniciales.