MariaDB ha un ROUND()
funzione e un TRUNCATE()
funzione che può restituire gli stessi risultati o risultati diversi, a seconda del valore esatto dei loro argomenti.
Come suggeriscono i nomi delle funzioni, ROUND()
round il numero e TRUNCATE()
tronca il numero. Troncare un numero semplicemente lo interrompe senza eseguire alcun arrotondamento.
Di seguito è riportato un rapido riassunto della differenza tra ROUND()
e TRUNCATE()
in MariaDB.
La differenza
Ecco la differenza tra ciascuna funzione in poche parole:
ROUND()
round il suo argomento a un numero specificato di cifre decimali. Questo a volte farà sì che il risultato venga arrotondato per eccesso, a volte no.TRUNCATE()
semplicemente tronca il suo argomento a un numero specificato di cifre decimali. Non si verifica alcun arrotondamento.
Sintassi e definizioni
Innanzitutto, ecco le sintassi e le definizioni di ciascuna funzione.
ROUND()
Il ROUND()
la funzione può essere utilizzata nei due modi seguenti:
ROUND(X)
ROUND(X,D)
ROUND()
arrotonda l'argomento X
a D
decimali. L'algoritmo di arrotondamento dipende dal tipo di dati di X
.
TRUNCATE()
Il TRUNCATE()
la funzione può essere utilizzata con una sola sintassi:
TRUNCATE(X,D)
TRUNCATE()
restituisce il numero X
, troncato in D
cifre decimali.
Esempio
Ecco un confronto per dimostrare la differenza tra ROUND()
e TRUNCATE()
:
SELECT
TRUNCATE(3.6789, 2),
ROUND(3.6789, 2);
Risultato:
+---------------------+------------------+ | TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) | +---------------------+------------------+ | 3.67 | 3.68 | +---------------------+------------------+
In questo caso, il ROUND()
funzione arrotonda il numero per eccesso, perché la cifra successiva (8
) è maggiore di 5
.
Il TRUNCATE()
funzione d'altra parte, ha semplicemente troncato il numero alla cifra decimale specificata. TRUNCATE()
non esegue alcun arrotondamento. Taglia semplicemente il numero nel punto specificato.
Entrambe le funzioni accettano un valore negativo per la posizione decimale e si applica la stessa logica rispettiva:
SELECT
TRUNCATE(36789, -2),
ROUND(36789, -2);
Risultato:
+---------------------+------------------+ | TRUNCATE(36789, -2) | ROUND(36789, -2) | +---------------------+------------------+ | 36700 | 36800 | +---------------------+------------------+
Stesso risultato
Entrambe le funzioni possono talvolta restituire lo stesso risultato. Tutto dipende dal valore degli argomenti passati.
Ecco un esempio in cui entrambi restituiscono lo stesso risultato:
SELECT
TRUNCATE(3.6749, 2),
ROUND(3.6749, 2);
Risultato:
+---------------------+------------------+ | TRUNCATE(3.6749, 2) | ROUND(3.6749, 2) | +---------------------+------------------+ | 3.67 | 3.67 | +---------------------+------------------+
In questo caso, ROUND()
non ha arrotondato il numero per eccesso, perché la cifra successiva (4
) era inferiore a 5
. Pertanto, entrambi i risultati sono gli stessi.
Il FLOOR()
Funzione
Entrambe le funzioni sono diverse da FLOOR()
funzione, che restituisce il valore intero più grande non maggiore del suo argomento. FLOOR()
non accetta un secondo argomento come ROUND()
e TRUNCATE()
do (restituisce sempre e solo un numero intero).