PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как работи Round() в PostgreSQL

В 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 | 0

Round() срещу Trunc()

В някои случаи round() функцията може да изглежда да работи по подобен начин на trunc() . Но те са доста различни.

round() функция закръгля числото. Числото се закръглява до най-близкото цяло число или до посочения брой десетични знаци (в зависимост от това дали му давате един или два аргумента).

trunc() функцията от друга страна просто съкращава числото до нула или до посочения десетичен знак. Не се извършва закръгляване.

Ето пример за демонстриране на разликата.

SELECT 
  round(1.49, 1),
  trunc(1.49, 1); 

Резултат:

<предварителен кръг | trunc-------+-------1.5 | 1.4
  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Деактивирайте проверките на външни ключове на PostgreSQL за миграции

  2. Как да дефинирате първичен ключ за автоматично увеличение в PostgreSQL

  3. Грешка в сокета Postgresql на OSX 10.7.3 при стартиране на syncdb на Django

  4. Ядро на Entity Framework - Съдържа, чувствителен ли е главният или малък регистър?

  5. След възстановяване на моята база данни серийният номер е премахнат от колоната в Postgresql