I PostgreSQL er round()
funktion bruges til at afrunde et tal.
Funktionen kan fungere på en af to måder, afhængig af hvordan du bruger den. Du kan få det til at runde tallet til det nærmeste heltal eller til et bestemt antal decimaler.
Dette bestemmes af antallet af argumenter, du sender til funktionen, når du kalder den.
Syntaks
round()
funktionen kan bruges på en af følgende måder:
round(dp or numeric)
round(v numeric, s int)
Den første syntaks afrunder tallet til det nærmeste heltal. dp
angiver double precision
.
Den anden syntaks runder den af til et bestemt antal decimaler. I dette tilfælde v
er nummeret og s
er antallet af decimaler.
Returtypen for denne funktion er den samme som inputtypen.
Eksempel på første syntaks
Her er et eksempel, der bruger den første syntaks.
SELECT round(13.50);
Resultat:
14
I dette tilfælde er brøksekunderne 50, så tallet rundes op til nærmeste heltal.
Hvis brøksekunderne var mindre end 50, ville det være blevet rundet ned, og resultatet ville være 13.
Her er et eksempel på det.
SELECT round(13.49);
Resultat:
13
Eksempel på anden syntaks
Her er et eksempel, der bruger den anden syntaks.
SELECT round(13.50, 1);
Resultat:
13,5
I dette tilfælde blev intet rundet op, og nul blev simpelthen droppet. I sådanne tilfælde returnerer det det samme resultat, som vi ville have set, hvis vi havde brugt trunc()
fungere.
Men hvis vi justerer brøksekunderne lidt, vil vi se, at resultatet er afrundet.
SELECT
round(13.45, 1) AS "13.45",
round(13.44, 1) AS "13.44";
Resultat:
13.45 | 13.44-------+-------13.5 | 13.4
Det er dog vigtigt at bemærke, at resultatet er fuldstændig afhængigt af, hvor mange brøksekunder du angiver i det andet argument.
Her er det samme eksempel igen, men med to decimaler angivet.
SELECT
round(13.45, 2) AS "13.45",
round(13.44, 2) AS "13.44";
Resultat:
13.45 | 13.44-------+-------13.45 | 13.44
I dette tilfælde var intet afrundet, fordi jeg specificerede det nøjagtige antal decimaler, som jeg angav.
Tilføjelse af brøkdele sekunder
Der er intet, der forhindrer dig i at angive flere brøksekunder, end der er i det oprindelige tal.
SELECT
round(13.45, 3) AS "13.45",
round(13.44, 3) AS "13.44";
Resultat:
13.45 | 13.44--------+--------13.450 | 13.440
I dette tilfælde tilføjer den blot et nul til den højre del af brøksekunderne.
Her er et eksempel på angivelse af et antal decimaler, når det oprindelige tal ikke inkluderer nogen brøksekunder.
SELECT round(12, 3);
Resultat:
12.000
Negative decimaler
Her er, hvad der sker, når det andet argument er en negativ værdi.
SELECT round(789, -2);
Resultat:
800
Her er nogle flere.
SELECT
round(789, -2),
round(789, -1),
round(489, -2),
round(489, -1),
round(489, -3);
Resultat:
Round() vs Trunc()
I nogle tilfælde er round()
funktionen kan se ud til at virke på samme måde som trunc()
. Men de er ret forskellige.
round()
funktion runder tallet. Tallet afrundes til nærmeste heltal eller til det angivne antal decimaler (afhængigt af om du giver det et argument eller to argumenter).
trunc()
funktion på den anden side afkorter simpelthen tallet mod nul eller til den angivne decimal. Der udføres ingen afrunding.
Her er et eksempel for at vise forskellen.
SELECT
round(1.49, 1),
trunc(1.49, 1);
Resultat: