PostgreSQL không xác định round(double precision, integer)
. Vì lý do @Mike Sherrill 'Cat Recall' giải thích trong các nhận xét, phiên bản vòng có độ chính xác chỉ có sẵn cho 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)
(Trong phần trên, lưu ý rằng float8
chỉ là một bí danh viết tắt của double precision
. Bạn có thể thấy rằng PostgreSQL đang mở rộng nó trong đầu ra).
Bạn phải truyền giá trị được làm tròn thành numeric
để sử dụng dạng hai đối số của round
. Chỉ cần thêm ::numeric
đối với kiểu diễn viên viết tắt, như round(val::numeric,2)
.
Nếu bạn đang định dạng để hiển thị cho người dùng, không sử dụng round
. Sử dụng to_char
(xem:các chức năng định dạng kiểu dữ liệu trong sách hướng dẫn), cho phép bạn chỉ định một định dạng và cung cấp cho bạn một text
kết quả không bị ảnh hưởng bởi bất kỳ điều gì kỳ lạ mà ngôn ngữ ứng dụng của bạn có thể làm với numeric
các giá trị. Ví dụ:
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char
sẽ làm tròn số cho bạn như một phần của định dạng. FM
tiền tố nói với to_char
mà bạn không muốn có bất kỳ phần đệm nào có khoảng trắng ở đầu.