Существует только одна функция round
с двумя аргументами, которая принимает numeric
в качестве аргумента:
test=> \df round
List of functions
Schema | Name | Result data type | Argument data types | Type
------------+-------+------------------+---------------------+------
pg_catalog | round | double precision | double precision | func
pg_catalog | round | numeric | numeric | func
pg_catalog | round | numeric | numeric, integer | func
(3 rows)
Так что получается, что ваш float8
конвертируется в numeric
(без масштаба), и результат того же типа. Это не даст конечные нули:
test=> SELECT round(3.14159265, 2);
round
-------
3.14
(1 row)
Но если вы сохраните результат в столбце float8
, вы можете получить ошибки округления:
test=> SET extra_float_digits = 3;
SET
test=> SELECT round(3.14159265, 2)::float8;
round
---------------------
3.14000000000000012
(1 row)
Я рекомендую использовать numeric(10,2)
или что-то похожее в качестве типа данных столбца таблицы, тогда округление произойдет автоматически, и значение не может иметь более двух десятичных знаков.