MariaDB
 sql >> Datenbank >  >> RDS >> MariaDB

MariaDB ROUND() vs TRUNCATE()

MariaDB hat ein ROUND() Funktion und ein TRUNCATE() Funktion, die abhängig vom genauen Wert ihrer Argumente dieselben oder unterschiedliche Ergebnisse zurückgeben kann.

Wie die Funktionsnamen vermuten lassen, ROUND() Runden die Zahl und TRUNCATE() kürzt die Nummer. Das Abschneiden einer Zahl schneidet sie einfach ab, ohne eine Rundung durchzuführen.

Unten ist ein kurzer Überblick über den Unterschied zwischen ROUND() und TRUNCATE() in MariaDB.

Der Unterschied

Hier ist der Unterschied zwischen den einzelnen Funktionen auf den Punkt gebracht:

  • ROUND() Runden sein Argument auf eine bestimmte Anzahl von Dezimalstellen. Dies führt manchmal dazu, dass das Ergebnis aufgerundet wird, und manchmal nicht.
  • TRUNCATE() einfach abschneiden sein Argument auf eine bestimmte Anzahl von Dezimalstellen. Rundungen werden nicht vorgenommen.

Syntax &Definitionen

Hier sind zunächst die Syntax und Definitionen jeder Funktion.

ROUND()

Das ROUND() Die Funktion kann auf zwei Arten verwendet werden:

ROUND(X)
ROUND(X,D)

ROUND() rundet das Argument X bis D Nachkommastellen. Der Rundungsalgorithmus hängt vom Datentyp von X ab .

TRUNCATE()

Das TRUNCATE() Funktion kann mit nur einer Syntax verwendet werden:

TRUNCATE(X,D)

TRUNCATE() gibt die Zahl X zurück , abgeschnitten zu D Nachkommastellen.

Beispiel

Hier ist ein Vergleich, um den Unterschied zwischen ROUND() zu demonstrieren und TRUNCATE() :

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

Ergebnis:

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

In diesem Fall das ROUND() Die Funktion hat die Zahl aufgerundet, da die nächste Ziffer (8 ) ist größer als 5 .

Das TRUNCATE() Funktion hingegen schneidet die Zahl einfach an der angegebenen Dezimalstelle ab. TRUNCATE() führt keine Rundung durch. Es schneidet einfach die Nummer an der angegebenen Stelle ab.

Beide Funktionen akzeptieren einen negativen Wert für die Dezimalstelle, und es gilt die gleiche jeweilige Logik:

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

Ergebnis:

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

Gleiches Ergebnis

Beide Funktionen können manchmal das gleiche Ergebnis zurückgeben. Es hängt alles vom Wert der übergebenen Argumente ab.

Hier ist ein Beispiel, in dem beide dasselbe Ergebnis zurückgeben:

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

Ergebnis:

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

In diesem Fall ROUND() habe die Zahl nicht aufgerundet, da die nächste Ziffer (4 ) war kleiner als 5 . Daher sind beide Ergebnisse gleich.

Der FLOOR() Funktion

Beide Funktionen unterscheiden sich von FLOOR() -Funktion, die den größten ganzzahligen Wert zurückgibt, der nicht größer als ihr Argument ist. FLOOR() akzeptiert kein zweites Argument wie ROUND() und TRUNCATE() tun (es gibt ohnehin immer nur eine ganze Zahl zurück).