sql >> Database teknologi >  >> RDS >> MariaDB

MariaDB ROUND() vs TRUNCATE()

MariaDB har en ROUND() funktion og en TRUNCATE() funktion, der kan returnere de samme resultater eller forskellige resultater, afhængigt af den nøjagtige værdi af deres argumenter.

Som funktionsnavnene antyder, ROUND() runder tallet og TRUNCATE() trunkerer nummeret. Afkortning af et tal afskærer det simpelthen uden at udføre nogen afrunding.

Nedenfor er en hurtig gennemgang af forskellen mellem ROUND() og TRUNCATE() i MariaDB.

Forskellen

Her er forskellen mellem hver funktion i en nøddeskal:

  • ROUND() runder dets argument til et bestemt antal decimaler. Dette vil nogle gange få resultatet til at blive rundet op, og nogle gange ikke.
  • TRUNCATE() simpelthen trunkerer dets argument til et bestemt antal decimaler. Der sker ingen afrunding.

Syntaks og definitioner

For det første er her syntakserne og definitionerne for hver funktion.

ROUND()

ROUND() funktionen kan bruges på følgende to måder:

ROUND(X)
ROUND(X,D)

ROUND() runder argumentet X til D decimaler. Afrundingsalgoritmen afhænger af datatypen X .

TRUNCATE()

TRUNCATE() funktion kan kun bruges med én syntaks:

TRUNCATE(X,D)

TRUNCATE() returnerer tallet X , afkortet til D decimaler.

Eksempel

Her er en sammenligning for at demonstrere forskellen mellem ROUND() og TRUNCATE() :

SELECT 
    TRUNCATE(3.6789, 2),
    ROUND(3.6789, 2);

Resultat:

+---------------------+------------------+
| TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) |
+---------------------+------------------+
|                3.67 |             3.68 |
+---------------------+------------------+

I dette tilfælde er ROUND() funktion rundede tallet op, fordi det næste ciffer (8 ) er større end 5 .

TRUNCATE() funktion på den anden side blot afkortede tallet med den angivne decimal. TRUNCATE() laver ingen afrunding. Den afskærer simpelthen nummeret på det angivne sted.

Begge funktioner accepterer en negativ værdi for decimalpladsen, og den samme respektive logik gælder:

SELECT 
    TRUNCATE(36789, -2),
    ROUND(36789, -2);

Resultat:

+---------------------+------------------+
| TRUNCATE(36789, -2) | ROUND(36789, -2) |
+---------------------+------------------+
|               36700 |            36800 |
+---------------------+------------------+

Samme resultat

Begge funktioner kan nogle gange returnere det samme resultat. Det hele afhænger af værdien af ​​de argumenter, der sendes.

Her er et eksempel, hvor de begge returnerer det samme resultat:

SELECT 
    TRUNCATE(3.6749, 2),
    ROUND(3.6749, 2);

Resultat:

+---------------------+------------------+
| TRUNCATE(3.6749, 2) | ROUND(3.6749, 2) |
+---------------------+------------------+
|                3.67 |             3.67 |
+---------------------+------------------+

I dette tilfælde ROUND() rundede ikke tallet op, fordi det næste ciffer (4 ) var mindre end 5 . Derfor er begge resultater de samme.

FLOOR() Funktion

Begge funktioner er forskellige fra FLOOR() funktion, som returnerer den største heltalværdi, der ikke er større end dens argument. FLOOR() accepterer ikke et andet argument som ROUND() og TRUNCATE() do (det returnerer kun et heltal alligevel).


  1. Beregn percentil fra seneste i MySQL

  2. Postgres FOR LOOP

  3. Brug af arbejdsgangsmønstre til at administrere enhver enheds tilstand

  4. Forkert syntaks nær 'GO'