MariaDB har en ROUND()
funktion og en TRUNCATE()
funktion, der kan returnere de samme resultater eller forskellige resultater, afhængigt af den nøjagtige værdi af deres argumenter.
Som funktionsnavnene antyder, ROUND()
runder tallet og TRUNCATE()
trunkerer nummeret. Afkortning af et tal afskærer det simpelthen uden at udføre nogen afrunding.
Nedenfor er en hurtig gennemgang af forskellen mellem ROUND()
og TRUNCATE()
i MariaDB.
Forskellen
Her er forskellen mellem hver funktion i en nøddeskal:
ROUND()
runder dets argument til et bestemt antal decimaler. Dette vil nogle gange få resultatet til at blive rundet op, og nogle gange ikke.TRUNCATE()
simpelthen trunkerer dets argument til et bestemt antal decimaler. Der sker ingen afrunding.
Syntaks og definitioner
For det første er her syntakserne og definitionerne for hver funktion.
ROUND()
ROUND()
funktionen kan bruges på følgende to måder:
ROUND(X)
ROUND(X,D)
ROUND()
runder argumentet X
til D
decimaler. Afrundingsalgoritmen afhænger af datatypen X
.
TRUNCATE()
TRUNCATE()
funktion kan kun bruges med én syntaks:
TRUNCATE(X,D)
TRUNCATE()
returnerer tallet X
, afkortet til D
decimaler.
Eksempel
Her er en sammenligning for at demonstrere forskellen mellem ROUND()
og TRUNCATE()
:
SELECT
TRUNCATE(3.6789, 2),
ROUND(3.6789, 2);
Resultat:
+---------------------+------------------+ | TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) | +---------------------+------------------+ | 3.67 | 3.68 | +---------------------+------------------+
I dette tilfælde er ROUND()
funktion rundede tallet op, fordi det næste ciffer (8
) er større end 5
.
TRUNCATE()
funktion på den anden side blot afkortede tallet med den angivne decimal. TRUNCATE()
laver ingen afrunding. Den afskærer simpelthen nummeret på det angivne sted.
Begge funktioner accepterer en negativ værdi for decimalpladsen, og den samme respektive logik gælder:
SELECT
TRUNCATE(36789, -2),
ROUND(36789, -2);
Resultat:
+---------------------+------------------+ | TRUNCATE(36789, -2) | ROUND(36789, -2) | +---------------------+------------------+ | 36700 | 36800 | +---------------------+------------------+
Samme resultat
Begge funktioner kan nogle gange returnere det samme resultat. Det hele afhænger af værdien af de argumenter, der sendes.
Her er et eksempel, hvor de begge returnerer det samme resultat:
SELECT
TRUNCATE(3.6749, 2),
ROUND(3.6749, 2);
Resultat:
+---------------------+------------------+ | TRUNCATE(3.6749, 2) | ROUND(3.6749, 2) | +---------------------+------------------+ | 3.67 | 3.67 | +---------------------+------------------+
I dette tilfælde ROUND()
rundede ikke tallet op, fordi det næste ciffer (4
) var mindre end 5
. Derfor er begge resultater de samme.
FLOOR()
Funktion
Begge funktioner er forskellige fra FLOOR()
funktion, som returnerer den største heltalværdi, der ikke er større end dens argument. FLOOR()
accepterer ikke et andet argument som ROUND()
og TRUNCATE()
do (det returnerer kun et heltal alligevel).