MariaDB har en ROUND()
funktion och en TRUNCATE()
funktion som kan returnera samma resultat eller olika resultat, beroende på det exakta värdet av deras argument.
Som funktionsnamnen antyder, ROUND()
rundor numret och TRUNCATE()
trunkerar numret. Trunkering av ett nummer skär helt enkelt av det utan att göra någon avrundning.
Nedan är en snabb sammanfattning av skillnaden mellan ROUND()
och TRUNCATE()
i MariaDB.
Skillnaden
Här är skillnaden mellan varje funktion i ett nötskal:
ROUND()
rundor dess argument till ett visst antal decimaler. Detta leder ibland till att resultatet avrundas uppåt och ibland inte.TRUNCATE()
helt enkelt trunkerar dess argument till ett visst antal decimaler. Ingen avrundning sker.
Syntax och definitioner
Först, här är syntaxerna och definitionerna för varje funktion.
ROUND()
ROUND()
funktionen kan användas på följande två sätt:
ROUND(X)
ROUND(X,D)
ROUND()
avrundar argumentet X
till D
decimaler. Avrundningsalgoritmen beror på datatypen X
.
TRUNCATE()
TRUNCATE()
funktion kan användas med endast en syntax:
TRUNCATE(X,D)
TRUNCATE()
returnerar talet X
, trunkerad till D
decimaler.
Exempel
Här är en jämförelse för att visa skillnaden mellan ROUND()
och TRUNCATE()
:
SELECT
TRUNCATE(3.6789, 2),
ROUND(3.6789, 2);
Resultat:
+---------------------+------------------+ | TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) | +---------------------+------------------+ | 3.67 | 3.68 | +---------------------+------------------+
I det här fallet, ROUND()
funktionen avrundade siffran uppåt, eftersom nästa siffra (8
) är större än 5
.
TRUNCATE()
funktion å andra sidan, trunkerade helt enkelt talet med den angivna decimalen. TRUNCATE()
gör ingen avrundning. Det klipper helt enkelt av numret på den angivna platsen.
Båda funktionerna accepterar ett negativt värde för decimalen, och samma respektive logik gäller:
SELECT
TRUNCATE(36789, -2),
ROUND(36789, -2);
Resultat:
+---------------------+------------------+ | TRUNCATE(36789, -2) | ROUND(36789, -2) | +---------------------+------------------+ | 36700 | 36800 | +---------------------+------------------+
Samma resultat
Båda funktionerna kan ibland returnera samma resultat. Allt beror på värdet av argumenten som skickas.
Här är ett exempel där de båda returnerar samma resultat:
SELECT
TRUNCATE(3.6749, 2),
ROUND(3.6749, 2);
Resultat:
+---------------------+------------------+ | TRUNCATE(3.6749, 2) | ROUND(3.6749, 2) | +---------------------+------------------+ | 3.67 | 3.67 | +---------------------+------------------+
I det här fallet, ROUND()
avrundade inte siffran uppåt eftersom nästa siffra (4
) var mindre än 5
. Därför är båda resultaten desamma.
FLOOR()
Funktion
Båda funktionerna skiljer sig från FLOOR()
funktion, som returnerar det största heltalsvärdet som inte är större än dess argument. FLOOR()
accepterar inte ett andra argument som ROUND()
och TRUNCATE()
do (det returnerar bara ett heltal ändå).