PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment Round() fonctionne dans PostgreSQL

Dans PostgreSQL, le round() La fonction est utilisée pour arrondir un nombre.

La fonction peut fonctionner de deux manières, selon la façon dont vous l'utilisez. Vous pouvez arrondir le nombre à l'entier le plus proche ou à un nombre spécifié de décimales.

Ceci est déterminé par le nombre d'arguments que vous transmettez à la fonction lorsque vous l'appelez.

Syntaxe

Le round() La fonction peut être utilisée de l'une des manières suivantes :

round(dp or numeric)
round(v numeric, s int) 

La première syntaxe arrondit le nombre à l'entier le plus proche. Le dp indique double precision .

La deuxième syntaxe l'arrondit à un nombre spécifié de décimales. Dans ce cas, v est le nombre, et s est le nombre de décimales.

Le type de retour pour cette fonction est le même que le type d'entrée.

Exemple de première syntaxe

Voici un exemple qui utilise la première syntaxe.

SELECT round(13.50); 

Résultat :

14

Dans ce cas, les fractions de seconde sont 50 et le nombre est donc arrondi vers le haut à l'entier le plus proche.

Si les fractions de secondes étaient inférieures à 50, elles auraient été arrondies à l'inférieur et le résultat serait 13.

En voici un exemple.

SELECT round(13.49); 

Résultat :

13

Exemple de deuxième syntaxe

Voici un exemple qui utilise la seconde syntaxe.

SELECT round(13.50, 1); 

Résultat :

13.5

Dans ce cas, rien n'a été arrondi et zéro a simplement été supprimé. Dans de tels cas, il renvoie le même résultat que nous aurions vu si nous avions utilisé le trunc() une fonction.

Cependant, si nous ajustons légèrement les fractions de secondes, nous verrons que le résultat est arrondi.

SELECT 
  round(13.45, 1) AS "13.45",
  round(13.44, 1) AS "13.44"; 

Résultat :

13h45 | 13.44-------+-------13.5 | 13.4

Cependant, il est important de noter que le résultat dépend entièrement du nombre de fractions de secondes que vous spécifiez dans le deuxième argument.

Voici à nouveau le même exemple, mais avec deux décimales spécifiées.

SELECT 
  round(13.45, 2) AS "13.45",
  round(13.44, 2) AS "13.44"; 

Résultat :

13h45 | 13.44-------+-------13.45 | 13.44

Dans ce cas, rien n'a été arrondi, car j'ai spécifié le nombre exact de décimales que j'ai fournies.

Ajouter des fractions de seconde

Rien ne vous empêche de spécifier plus de fractions de seconde que le nombre d'origine.

SELECT 
  round(13.45, 3) AS "13.45",
  round(13.44, 3) AS "13.44"; 

Résultat :

13h45 | 13.44--------+--------13.450 | 13.440

Dans ce cas, il ajoute simplement un zéro à la partie droite des fractions de seconde.

Voici un exemple de spécification d'un nombre de décimales lorsque le nombre d'origine n'inclut aucune fraction de seconde.

SELECT round(12, 3); 

Résultat :

12 000

Décimales négatives

Voici ce qui se passe lorsque le deuxième argument est une valeur négative.

SELECT round(789, -2); 

Résultat :

800

En voici d'autres.

SELECT 
  round(789, -2),
  round(789, -1),
  round(489, -2),
  round(489, -1),
  round(489, -3); 

Résultat :

tour | rond | rond | rond | rond-------+-------+-------+-------+-------800 | 790 | 500 | 490 | 0

Round() vs Trunc()

Dans certains cas, le round() la fonction peut sembler fonctionner de la même manière que trunc() . Mais ils sont assez différents.

Le round() fonction arrondit le nombre. Le nombre est arrondi à l'entier le plus proche ou au nombre de décimales spécifié (selon que vous lui donnez un ou deux arguments).

Le trunc() fonction d'autre part tronque simplement le nombre vers zéro ou à la décimale spécifiée. Aucun arrondi n'est effectué.

Voici un exemple pour démontrer la différence.

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

Résultat :

tour | tronc-------+-------1.5 | 1.4