PostgreSQL definiert round(double precision, integer)
nicht . Aus Gründen @Mike Sherrill 'Cat Recall' erklärt in den Kommentaren, dass die Version von round, die eine Genauigkeit benötigt, nur für numeric
verfügbar ist .
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)
(Beachten Sie oben, dass float8
ist nur ein abgekürzter Alias für double precision
. Sie können sehen, dass PostgreSQL es in der Ausgabe erweitert).
Sie müssen den zu rundenden Wert in numeric
umwandeln um die Zwei-Argumente-Form von round
zu verwenden . Hängen Sie einfach ::numeric
an für die Kurzform, wie round(val::numeric,2)
.
Wenn Sie für die Anzeige für den Benutzer formatieren, verwenden Sie nicht round
. Verwenden Sie to_char
(siehe:Formatierungsfunktionen für Datentypen im Handbuch), mit dem Sie ein Format angeben können und einen text
erhalten Ergebnis, das nicht von der Verrücktheit Ihrer Client-Sprache mit numeric
beeinflusst wird Werte. Zum Beispiel:
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char
rundet Zahlen als Teil der Formatierung für Sie. Der FM
prefix sagt to_char
dass Sie keine Auffüllung mit führenden Leerzeichen wünschen.