PostgreSQL tidak mendefinisikan round(double precision, integer) . Karena alasan @Mike Sherrill 'Cat Recall' jelaskan di komentar, versi putaran yang membutuhkan presisi hanya tersedia untuk 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)
(Pada contoh di atas, perhatikan bahwa float8 hanyalah sebuah alias singkatan untuk double precision . Anda dapat melihat bahwa PostgreSQL mengembangkannya di output).
Anda harus memberikan nilai yang akan dibulatkan menjadi numeric untuk menggunakan bentuk dua argumen round . Cukup tambahkan ::numeric untuk pemeran singkatan, seperti round(val::numeric,2) .
Jika Anda memformat untuk ditampilkan kepada pengguna, jangan gunakan round . Gunakan to_char (lihat:fungsi pemformatan tipe data dalam manual), yang memungkinkan Anda menentukan format dan memberi Anda text hasil yang tidak terpengaruh oleh keanehan apa pun yang mungkin dilakukan bahasa klien Anda dengan numeric nilai-nilai. Misalnya:
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char akan membulatkan angka untuk Anda sebagai bagian dari pemformatan. FM awalan memberitahu to_char bahwa Anda tidak ingin pengisi apa pun dengan spasi di depan.