sql >> Databasteknik >  >> RDS >> MariaDB

MariaDB ROUND() vs TRUNCATE()

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


  1. MariaDB JSON_CONTAINS() Förklarad

  2. Använda IN-satsen med en kommaavgränsad sträng från utdata från en replace() funktion i Oracle SQL

  3. 2 sätt att skapa en tabell om den inte redan finns i Oracle

  4. Världens populäraste databashanteringssystem