В PostgreSQL, round()
функцията се използва за закръгляне на число.
Функцията може да работи по един от двата начина, в зависимост от това как я използвате. Можете да го закръглите до най-близкото цяло число или до определен брой десетични знаци.
Това се определя от броя на аргументите, които предавате на функцията, когато я извиквате.
Синтаксис
round()
функцията може да се използва по един от следните начини:
round(dp or numeric)
round(v numeric, s int)
Първият синтаксис закръгля числото до най-близкото цяло число. dp
обозначава double precision
.
Вторият синтаксис го закръгля до определен брой десетични знака. В този случай v
е числото и s
е броят на десетичните знаци.
Типът на връщането за тази функция е същият като типа на входа.
Пример за първи синтаксис
Ето пример, който използва първия синтаксис.
SELECT round(13.50);
Резултат:
14
В този случай дробните секунди са 50 и така числото се закръглява нагоре до най-близкото цяло число.
Ако частичните секунди бяха по-малко от 50, то щеше да бъде закръглено надолу и резултатът щеше да бъде 13.
Ето пример за това.
SELECT round(13.49);
Резултат:
13
Пример за втори синтаксис
Ето пример, който използва втория синтаксис.
SELECT round(13.50, 1);
Резултат:
13.5
В този случай нищо не е закръглено и нулата просто е отпаднала. В такива случаи той връща същия резултат, който бихме видели, ако използвахме trunc()
функция.
Ако обаче коригираме леко дробните секунди, ще видим, че резултатът е закръглен.
SELECT
round(13.45, 1) AS "13.45",
round(13.44, 1) AS "13.44";
Резултат:
<преди>13.45 | 13,44-------+-------13,5 | 13.4Важно е обаче да се отбележи, че резултатът е напълно зависим от това колко частични секунди сте посочили във втория аргумент.
Ето отново същия пример, но с посочени два знака след десетичната запетая.
SELECT
round(13.45, 2) AS "13.45",
round(13.44, 2) AS "13.44";
Резултат:
<преди>13.45 | 13,44-------+-------13,45 | 13.44В този случай нищо не беше закръглено, защото посочих точния брой десетични знаци, който предоставих.
Добавяне на дробни секунди
Нищо не ви пречи да посочите повече части от секундите, отколкото е в оригиналното число.
SELECT
round(13.45, 3) AS "13.45",
round(13.44, 3) AS "13.44";
Резултат:
<преди>13.45 | 13,44--------+--------13,450 | 13,440В този случай той просто добавя нула към дясната част от дробните секунди.
Ето пример за посочване на брой десетични знаци, когато оригиналното число не включва никакви дробни секунди.
SELECT round(12, 3);
Резултат:
12 000
Отрицателни десетични знаци
Ето какво се случва, когато вторият аргумент е отрицателна стойност.
SELECT round(789, -2);
Резултат:
800
Ето още няколко.
SELECT
round(789, -2),
round(789, -1),
round(489, -2),
round(489, -1),
round(489, -3);
Резултат:
<предварителен кръг | кръг | кръг | кръг | кръг-------+-------+-------+-------+-------800 | 790 | 500 | 490 | 0Round() срещу Trunc()
В някои случаи round()
функцията може да изглежда да работи по подобен начин на trunc()
. Но те са доста различни.
round()
функция закръгля числото. Числото се закръглява до най-близкото цяло число или до посочения брой десетични знаци (в зависимост от това дали му давате един или два аргумента).
trunc()
функцията от друга страна просто съкращава числото до нула или до посочения десетичен знак. Не се извършва закръгляване.
Ето пример за демонстриране на разликата.
SELECT
round(1.49, 1),
trunc(1.49, 1);
Резултат:
<предварителен кръг | trunc-------+-------1.5 | 1.4