PostgreSQL не дефинира round(double precision, integer)
. Поради причини @Mike Sherrill 'Cat Recall' обяснява в коментарите, версията на кръга, която изисква прецизност, е достъпна само за 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)
(В горното, имайте предвид, че float8
е просто съкратен псевдоним за double precision
. Можете да видите, че PostgreSQL го разширява в изхода).
Трябва да прехвърлите стойността, която да бъде закръглена до numeric
за да използвате формата с два аргумента на round
. Просто добавете ::numeric
за стенография, като round(val::numeric,2)
.
Ако форматирате за показване на потребителя, не използвайте round
. Използвайте to_char
(вижте:функции за форматиране на тип данни в ръководството), което ви позволява да посочите формат и ви дава text
резултат, който не се влияе от каквито и да е странности, които вашият клиентски език може да направи с numeric
стойности. Например:
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char
ще закръгли числата вместо вас като част от форматирането. FM
префиксът казва to_char
че не искате подпълване с водещи интервали.