PostgreSQL definieert round(double precision, integer)
niet . Om redenen @Mike Sherrill 'Cat Recall' legt uit in de opmerkingen, de versie van de ronde die een precisie vereist, is alleen beschikbaar voor 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)
(Houd er in het bovenstaande rekening mee dat float8
is slechts een verkorte alias voor double precision
. Je kunt zien dat PostgreSQL het uitbreidt in de uitvoer).
U moet de af te ronden waarde casten naar numeric
om de twee-argumentvorm van round
te gebruiken . Voeg gewoon ::numeric
toe voor de steno-cast, zoals round(val::numeric,2)
.
Als je formatteert voor weergave aan de gebruiker, gebruik dan geen round
. Gebruik to_char
(zie:gegevenstype opmaakfuncties in de handleiding), waarmee u een formaat kunt specificeren en u een text
krijgt resultaat dat niet wordt beïnvloed door de gekheid die uw klanttaal zou kunnen veroorzaken met numeric
waarden. Bijvoorbeeld:
regress=> SELECT to_char(float8 '3.1415927', 'FM999999999.00');
to_char
---------------
3.14
(1 row)
to_char
zal getallen voor u afronden als onderdeel van de opmaak. De FM
prefix vertelt to_char
dat u geen opvulling met voorloopspaties wilt.