W PostgreSQL funkcja round()
funkcja służy do zaokrąglania liczby.
Funkcja może działać na dwa sposoby, w zależności od tego, jak z niej korzystasz. Możesz zaokrąglić liczbę do najbliższej liczby całkowitej lub do określonej liczby miejsc po przecinku.
Jest to określane przez liczbę argumentów, które przekazujesz do funkcji podczas jej wywoływania.
Składnia
round()
funkcja może być używana na jeden z następujących sposobów:
round(dp or numeric)
round(v numeric, s int)
Pierwsza składnia zaokrągla liczbę do najbliższej liczby całkowitej. dp
wskazuje double precision
.
Druga składnia zaokrągla go do określonej liczby miejsc dziesiętnych. W tym przypadku v
to liczba, a s
to liczba miejsc dziesiętnych.
Typ zwracany dla tej funkcji jest taki sam jak typ wejściowy.
Przykład pierwszej składni
Oto przykład, który używa pierwszej składni.
SELECT round(13.50);
Wynik:
14
W tym przypadku ułamki sekund wynoszą 50, więc liczba jest zaokrąglana w górę do najbliższej liczby całkowitej.
Gdyby ułamki sekund były mniejsze niż 50, zostałyby zaokrąglone w dół, a wynik byłby 13.
Oto przykład.
SELECT round(13.49);
Wynik:
13
Przykład drugiej składni
Oto przykład, który używa drugiej składni.
SELECT round(13.50, 1);
Wynik:
13,5
W tym przypadku nic nie zostało zaokrąglone w górę, a zero zostało po prostu odrzucone. W takich przypadkach zwraca ten sam wynik, który widzielibyśmy, gdybyśmy użyli trunc()
funkcjonować.
Jeśli jednak nieznacznie dostosujemy ułamki sekund, zobaczymy, że wynik jest zaokrąglony.
SELECT
round(13.45, 1) AS "13.45",
round(13.44, 1) AS "13.44";
Wynik:
13.45 | 13.44 --------+-------13,5 | 13.4
Należy jednak pamiętać, że wynik jest całkowicie zależny od liczby ułamków sekund określonych w drugim argumencie.
Oto znowu ten sam przykład, ale z podanymi dwoma miejscami po przecinku.
SELECT
round(13.45, 2) AS "13.45",
round(13.44, 2) AS "13.44";
Wynik:
13.45 | 13.44 -------+-------13.45 | 13.44
W tym przypadku nic nie zostało zaokrąglone, ponieważ podałem dokładną liczbę miejsc dziesiętnych, które podałem.
Dodawanie ułamków sekund
Nic nie stoi na przeszkodzie, aby określić więcej ułamków sekund niż w oryginalnej liczbie.
SELECT
round(13.45, 3) AS "13.45",
round(13.44, 3) AS "13.44";
Wynik:
13.45 | 13.44 --------+-----------13.450 | 13.440
W tym przypadku po prostu dodaje zero do prawej części ułamka sekundy.
Oto przykład określenia liczby miejsc dziesiętnych, gdy oryginalna liczba nie zawiera żadnych ułamków sekund.
SELECT round(12, 3);
Wynik:
12 000
Ujemne miejsca dziesiętne
Oto, co się dzieje, gdy drugi argument ma wartość ujemną.
SELECT round(789, -2);
Wynik:
800
Oto kilka innych.
SELECT
round(789, -2),
round(789, -1),
round(489, -2),
round(489, -1),
round(489, -3);
Wynik:
runda | okrągły | okrągły | okrągły | okrągła-------+-------+-------+-------+-------800 | 790 | 500 | 490 | 0
Round() vs Trunc()
W niektórych przypadkach round()
funkcja może wydawać się działać w podobny sposób do trunc()
. Ale są zupełnie inne.
round()
funkcja zaokrągla liczbę. Liczba jest zaokrąglana do najbliższej liczby całkowitej lub do określonej liczby miejsc po przecinku (w zależności od tego, czy podasz jeden argument, czy dwa argumenty).
trunc()
z drugiej strony funkcja po prostu obcina liczbę do zera lub do określonego miejsca dziesiętnego. Żadne zaokrąglanie nie jest wykonywane.
Oto przykład pokazujący różnicę.
SELECT
round(1.49, 1),
trunc(1.49, 1);
Wynik: