In PostgreSQL, il round()
la funzione viene utilizzata per arrotondare un numero.
La funzione può funzionare in due modi, a seconda di come la usi. Puoi arrotondare il numero all'intero più vicino o a un numero specificato di cifre decimali.
Questo è determinato dal numero di argomenti che passi alla funzione quando la chiami.
Sintassi
Il round()
la funzione può essere utilizzata in uno dei seguenti modi:
round(dp or numeric)
round(v numeric, s int)
La prima sintassi arrotonda il numero all'intero più vicino. Il dp
indica double precision
.
La seconda sintassi lo arrotonda a un numero specificato di cifre decimali. In questo caso, v
è il numero e s
è il numero di cifre decimali.
Il tipo restituito per questa funzione è lo stesso del tipo di input.
Esempio di prima sintassi
Ecco un esempio che utilizza la prima sintassi.
SELECT round(13.50);
Risultato:
14
In questo caso i secondi frazionari sono 50 e quindi il numero viene arrotondato per eccesso al numero intero più vicino.
Se la frazione di secondo fosse stata inferiore a 50, sarebbe stata arrotondata per difetto e il risultato sarebbe stato 13.
Eccone un esempio.
SELECT round(13.49);
Risultato:
13
Esempio di seconda sintassi
Ecco un esempio che utilizza la seconda sintassi.
SELECT round(13.50, 1);
Risultato:
13.5
In questo caso, nulla è stato arrotondato e zero è stato semplicemente eliminato. In questi casi, restituisce lo stesso risultato che avremmo visto se avessimo usato trunc()
funzione.
Tuttavia, se regoliamo leggermente i secondi frazionari, vedremo che il risultato è arrotondato.
SELECT
round(13.45, 1) AS "13.45",
round(13.44, 1) AS "13.44";
Risultato:
13.45 | 13.44 -------+------- 13.5 | 13.4
Tuttavia, è importante notare che il risultato dipende completamente da quanti secondi frazionari specifichi nel secondo argomento.
Ecco di nuovo lo stesso esempio, ma con due cifre decimali specificate.
SELECT
round(13.45, 2) AS "13.45",
round(13.44, 2) AS "13.44";
Risultato:
13.45 | 13.44 -------+------- 13.45 | 13.44
In questo caso non è stato arrotondato nulla, perché ho specificato il numero esatto di cifre decimali che ho fornito.
Aggiunta di secondi frazionari
Non c'è nulla che ti impedisca di specificare più secondi frazionari rispetto al numero originale.
SELECT
round(13.45, 3) AS "13.45",
round(13.44, 3) AS "13.44";
Risultato:
13.45 | 13.44 --------+-------- 13.450 | 13.440
In questo caso aggiunge semplicemente uno zero alla parte destra dei secondi frazionari.
Ecco un esempio di come specificare un numero di cifre decimali quando il numero originale non include secondi frazionari.
SELECT round(12, 3);
Risultato:
12.000
Punti decimali negativi
Ecco cosa succede quando il secondo argomento è un valore negativo.
SELECT round(789, -2);
Risultato:
800
Eccone altri.
SELECT
round(789, -2),
round(789, -1),
round(489, -2),
round(489, -1),
round(489, -3);
Risultato:
round | round | round | round | round -------+-------+-------+-------+------- 800 | 790 | 500 | 490 | 0
Round() vs Trunc()
In alcuni casi, il round()
potrebbe sembrare che funzioni in modo simile a trunc()
. Ma sono abbastanza diversi.
Il round()
la funzione arrotonda il numero. Il numero viene arrotondato all'intero più vicino o al numero specificato di cifre decimali (a seconda che gli venga assegnato un argomento o due).
Il trunc()
la funzione d'altra parte tronca semplicemente il numero verso zero o alla cifra decimale specificata. Non viene eseguito alcun arrotondamento.
Ecco un esempio per dimostrare la differenza.
SELECT
round(1.49, 1),
trunc(1.49, 1);
Risultato:
round | trunc -------+------- 1.5 | 1.4