MariaDB ma funkcję ROUND()
funkcja i TRUNCATE()
funkcja, która może zwrócić te same wyniki lub różne wyniki, w zależności od dokładnej wartości ich argumentów.
Jak sugerują nazwy funkcji, ROUND()
rundy numer i TRUNCATE()
obcina numer. Obcięcie liczby po prostu odcina ją bez wykonywania zaokrąglania.
Poniżej znajduje się krótkie podsumowanie różnicy między ROUND()
i TRUNCATE()
w MariaDB.
Różnica
Oto różnica między każdą funkcją w skrócie:
ROUND()
rundy jego argument do określonej liczby miejsc dziesiętnych. Czasami spowoduje to zaokrąglenie wyniku w górę, a czasami nie.TRUNCATE()
po prostu obcina jego argument do określonej liczby miejsc dziesiętnych. Nie występuje zaokrąglanie.
Składnia i definicje
Po pierwsze, oto składnia i definicje każdej funkcji.
ROUND()
ROUND()
funkcja może być używana na dwa sposoby:
ROUND(X)
ROUND(X,D)
ROUND()
zaokrągla argument X
do D
miejsca dziesiętne. Algorytm zaokrąglania zależy od typu danych X
.
TRUNCATE()
TRUNCATE()
funkcja może być używana tylko z jedną składnią:
TRUNCATE(X,D)
TRUNCATE()
zwraca liczbę X
, obcięte do D
miejsca po przecinku.
Przykład
Oto porównanie pokazujące różnicę między ROUND()
i TRUNCATE()
:
SELECT
TRUNCATE(3.6789, 2),
ROUND(3.6789, 2);
Wynik:
+---------------------+------------------+ | TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) | +---------------------+------------------+ | 3.67 | 3.68 | +---------------------+------------------+
W tym przypadku ROUND()
funkcja zaokrągliła liczbę w górę, ponieważ następna cyfra (8
) jest większe niż 5
.
TRUNCATE()
z drugiej strony, po prostu skrócił liczbę w określonym miejscu dziesiętnym. TRUNCATE()
nie wykonuje żadnych zaokrągleń. Po prostu odcina liczbę we wskazanym miejscu.
Obie funkcje przyjmują ujemną wartość miejsca dziesiętnego i obowiązuje ta sama logika:
SELECT
TRUNCATE(36789, -2),
ROUND(36789, -2);
Wynik:
+---------------------+------------------+ | TRUNCATE(36789, -2) | ROUND(36789, -2) | +---------------------+------------------+ | 36700 | 36800 | +---------------------+------------------+
Ten sam wynik
Obie funkcje mogą czasami zwrócić ten sam wynik. Wszystko zależy od wartości przekazywanych argumentów.
Oto przykład, w którym obie zwracają ten sam wynik:
SELECT
TRUNCATE(3.6749, 2),
ROUND(3.6749, 2);
Wynik:
+---------------------+------------------+ | TRUNCATE(3.6749, 2) | ROUND(3.6749, 2) | +---------------------+------------------+ | 3.67 | 3.67 | +---------------------+------------------+
W tym przypadku ROUND()
nie zaokrągliła liczby w górę, ponieważ następna cyfra (4
) był mniejszy niż 5
. Dlatego oba wyniki są takie same.
FLOOR()
Funkcja
Obie funkcje różnią się od FLOOR()
funkcja, która zwraca największą liczbę całkowitą nie większą niż jej argument. FLOOR()
nie akceptuje drugiego argumentu, takiego jak ROUND()
i TRUNCATE()
zrób (i tak zawsze zwraca tylko liczbę całkowitą).