MariaDB har en ROUND()
funktion och en FLOOR()
funktioner som är lika på vissa sätt, men ganska olika på andra sätt.
Nedan är en snabb sammanfattning av skillnaden mellan ROUND()
och FLOOR()
i MariaDB.
Skillnaden
Här är skillnaden mellan varje funktion i ett nötskal:
ROUND()
avrundar sitt argument till ett visst antal decimaler.FLOOR()
returnerar det största heltalsvärdet som inte är större än dess argument.
Syntax
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
.
FLOOR()
FLOOR()
funktion kan användas med endast en syntax:
FLOOR(X)
FLOOR()
returnerar det största heltalsvärdet som inte är större än X
.
Exempel på skillnaden
Här är en jämförelse för att visa skillnaden mellan ROUND()
och FLOOR()
:
SELECT
FLOOR(3.6789),
ROUND(3.6789);
Resultat:
+---------------+---------------+ | FLOOR(3.6789) | ROUND(3.6789) | +---------------+---------------+ | 3 | 4 | +---------------+---------------+
I det här fallet, ROUND()
funktionen avrundade siffran uppåt, eftersom nästa siffra (8
) är större än 5
.
FLOOR()
funktion å andra sidan, returnerade helt enkelt det största heltalsvärdet som inte var större än argumentet (3.6789
).
Andra argumentet
En annan skillnad är att ROUND()
accepterar ett valfritt andra argument, medan FLOOR()
inte.
Det andra argumentet låter dig ange hur många decimaler du ska avrunda talet till.
Exempel
SELECT
FLOOR(3.6789),
ROUND(3.6789, 2);
Resultat:
+---------------+------------------+ | FLOOR(3.6789) | ROUND(3.6789, 2) | +---------------+------------------+ | 3 | 3.68 | +---------------+------------------+
Exempel på samma resultat
Dessa funktioner kan ibland returnera samma resultat. Allt beror på värdet av argumenten som skickas.
Om vi till exempel placerar ett negativt tecken framför värdena får vi samma resultat:
SELECT
FLOOR(-3.6789),
ROUND(-3.6789);
Resultat:
+----------------+----------------+ | FLOOR(-3.6789) | ROUND(-3.6789) | +----------------+----------------+ | -4 | -4 | +----------------+----------------+
Därmed inte sagt att ett negativt värde alltid ger samma resultat – det gör det inte. Allt beror på de faktiska värdena som tillhandahålls och avrundningen som ska ske med ROUND()
.
Här är ett exempel där negativa värden ger olika resultat:
SELECT
FLOOR(-3.3739),
ROUND(-3.3739);
Resultat:
+----------------+----------------+ | FLOOR(-3.3739) | ROUND(-3.3739) | +----------------+----------------+ | -4 | -3 | +----------------+----------------+
Och här är ett exempel där positiva värden ger samma resultat:
SELECT
FLOOR(3.3739),
ROUND(3.3739);
Resultat:
+---------------+---------------+ | FLOOR(3.3739) | ROUND(3.3739) | +---------------+---------------+ | 3 | 3 | +---------------+---------------+
TRUNCATE()
Funktion
Båda funktionerna skiljer sig från TRUNCATE()
funktion, som helt enkelt trunkerar värdet till ett givet antal decimaler.