PostgreSQL nedefinuje round(double precision, integer)
. Z důvodů @Mike Sherrill 'Cat Recall' vysvětluje v komentářích, verze kola, která vyžaduje přesnost, je dostupná pouze pro 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)
(Ve výše uvedeném platí, že float8
je jen zkrácený alias pro double precision
. Ve výstupu můžete vidět, že PostgreSQL jej rozšiřuje).
Aby byla hodnota zaokrouhlena na numeric
, musíte přetypovat použít formu se dvěma argumenty round
. Stačí připojit ::numeric
pro těsnopisné obsazení, například round(val::numeric,2)
.
Pokud formátujete pro zobrazení uživateli, nepoužívejte round
. Použijte to_char
(viz:funkce formátování datových typů v příručce), která vám umožní určit formát a poskytne vám text
výsledek, který není ovlivněn jakýmikoli podivnostmi, které by váš klientský jazyk mohl udělat s numeric
hodnoty. Například:
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char
zaokrouhlí čísla za vás v rámci formátování. FM
prefix říká to_char
že nechcete žádnou výplň s úvodními mezerami.