Cómo redondear uniformemente a 2 decimales en PostgreSQL
ostgreSQL no define redondo (doble precisión, entero). En cuanto al motivo, Boo lo explicó de forma circular y requiere una versión precisa que solo funcione con números.
regreso=gt; SELECT round( float8 '3.1415927', 2);
ERROR: la función round(doble precisión, entero) no existe
regreso =gt; \df *round*
Lista de funciones
Esquema | Tipo de datos de resultado | Tipos de datos de argumento | ------- -------- ------------------ ----------------- ---- --------
pg_catalog | doble precisión | doble precisión | pg_catalog | doble precisión | p> pg_catalog | redondo | numérico | normal
pg_catalog | numérico, entero |p>
(4 filas)
; SELECT round( CAST(float8 '3.1415927' as numeric), 2
round
-------
3.14
(1 fila)
(En lo anterior, tenga en cuenta que float8 es solo un alias abreviado para doble precisión. Puede ver que PostgreSQL lo está expandiendo en la salida). Debe convertir el valor que se redondea a numérico en ambas formas de redondeo. Simplemente agregue ::numeric para una conversión abreviada, como round(val::numeric, 2). Si formatea la pantalla para ponerla redonda. Usando to_char (consulte: Funciones de formato de tipos de datos en este manual), le permite especificar el formato y le proporciona un texto que no está sujeto a ninguna rareza que el idioma de su cliente pueda hacer con los valores numéricos. Por ejemplo:
regress=gt; SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
------ --------
3.14
(1 fila)
to_char redondea un número como parte del formato. El prefijo FM le dice a to_char que no desea ningún relleno con espacios iniciales.