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.