sql >> Database >  >> RDS >> MariaDB

MariaDB RONDE() vs TRUNCATE()

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).


  1. Voorbeelden van het converteren van 'date' naar 'datetime2' in SQL Server (T-SQL)

  2. Installeer meerdere MySQL-instanties op een Linux-server -gebruik een apart MySQL-configuratiebestand

  3. MySQL ERROR 1290 (HY000) --secure-file-priv optie

  4. Inzicht in SQL Server-beveiligingsfunctie HAS_Permis_BY_Name en zijn gebruiksgevallen