MariaDB heeft een ROUND()
functie en een TRUNCATE()
functie die dezelfde resultaten of verschillende resultaten kan retourneren, afhankelijk van de exacte waarde van hun argumenten.
Zoals de functienamen suggereren, ROUND()
rondes het nummer en TRUNCATE()
afkapt het nummer. Als u een getal afkapt, wordt het eenvoudigweg afgebroken zonder afronding.
Hieronder volgt een kort overzicht van het verschil tussen ROUND()
en TRUNCATE()
in MariaDB.
Het verschil
Hier is het verschil tussen elke functie in een notendop:
ROUND()
rondes zijn argument tot een bepaald aantal decimalen. Hierdoor wordt het resultaat soms naar boven afgerond en soms niet.TRUNCATE()
gewoon afkapt zijn argument tot een bepaald aantal decimalen. Er vindt geen afronding plaats.
Syntaxis en definities
Ten eerste zijn hier de syntaxis en definities van elke functie.
ROUND()
De ROUND()
functie kan op de volgende twee manieren worden gebruikt:
ROUND(X)
ROUND(X,D)
ROUND()
rondt het argument X
af naar D
decimalen. Het afrondingsalgoritme is afhankelijk van het gegevenstype van X
.
TRUNCATE()
De TRUNCATE()
functie kan met slechts één syntaxis worden gebruikt:
TRUNCATE(X,D)
TRUNCATE()
geeft het getal X
. terug , afgekapt tot D
decimalen.
Voorbeeld
Hier is een vergelijking om het verschil aan te tonen tussen ROUND()
en TRUNCATE()
:
SELECT
TRUNCATE(3.6789, 2),
ROUND(3.6789, 2);
Resultaat:
+---------------------+------------------+ | TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) | +---------------------+------------------+ | 3.67 | 3.68 | +---------------------+------------------+
In dit geval is de ROUND()
functie rondt het getal naar boven af, omdat het volgende cijfer (8
) is groter dan 5
.
De TRUNCATE()
functie aan de andere kant, gewoon het getal op de opgegeven decimale plaats afgekapt. TRUNCATE()
doet geen afronding. Het snijdt gewoon het nummer af op de opgegeven plaats.
Beide functies accepteren een negatieve waarde voor de decimale plaats, en dezelfde respectieve logica is van toepassing:
SELECT
TRUNCATE(36789, -2),
ROUND(36789, -2);
Resultaat:
+---------------------+------------------+ | TRUNCATE(36789, -2) | ROUND(36789, -2) | +---------------------+------------------+ | 36700 | 36800 | +---------------------+------------------+
Hetzelfde resultaat
Beide functies kunnen soms hetzelfde resultaat opleveren. Het hangt allemaal af van de waarde van de argumenten die worden doorgegeven.
Hier is een voorbeeld waarbij ze allebei hetzelfde resultaat retourneren:
SELECT
TRUNCATE(3.6749, 2),
ROUND(3.6749, 2);
Resultaat:
+---------------------+------------------+ | TRUNCATE(3.6749, 2) | ROUND(3.6749, 2) | +---------------------+------------------+ | 3.67 | 3.67 | +---------------------+------------------+
In dit geval ROUND()
heeft het getal niet naar boven afgerond, omdat het volgende cijfer (4
) was minder dan 5
. Daarom zijn beide resultaten hetzelfde.
De FLOOR()
Functie
Beide functies zijn anders dan de FLOOR()
functie, die de grootste gehele waarde retourneert die niet groter is dan het argument. FLOOR()
accepteert geen tweede argument zoals ROUND()
en TRUNCATE()
doen (het retourneert sowieso alleen een geheel getal).