PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Funktionsweise von Round() in PostgreSQL

In PostgreSQL die round() Die Funktion wird zum Runden einer Zahl verwendet.

Die Funktion kann auf zwei Arten funktionieren, je nachdem, wie Sie sie verwenden. Sie können die Zahl auf die nächste ganze Zahl oder auf eine bestimmte Anzahl von Dezimalstellen runden.

Dies wird durch die Anzahl der Argumente bestimmt, die Sie der Funktion übergeben, wenn Sie sie aufrufen.

Syntax

Die round() Die Funktion kann auf eine der folgenden Arten verwendet werden:

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

Die erste Syntax rundet die Zahl auf die nächste Ganzzahl. Der dp zeigt double precision an .

Die zweite Syntax rundet auf eine angegebene Anzahl von Dezimalstellen. In diesem Fall v die Zahl ist, und s ist die Anzahl der Dezimalstellen.

Der Rückgabetyp für diese Funktion ist derselbe wie der Eingabetyp.

Beispiel der ersten Syntax

Hier ist ein Beispiel, das die erste Syntax verwendet.

SELECT round(13.50); 

Ergebnis:

14

In diesem Fall sind die Sekundenbruchteile 50, also wird die Zahl auf gerundet auf die nächste ganze Zahl.

Wenn die Sekundenbruchteile kleiner als 50 wären, wäre abgerundet worden und das Ergebnis wäre 13.

Hier ist ein Beispiel dafür.

SELECT round(13.49); 

Ergebnis:

13

Beispiel für zweite Syntax

Hier ist ein Beispiel, das die zweite Syntax verwendet.

SELECT round(13.50, 1); 

Ergebnis:

13.5

In diesem Fall wurde nichts aufgerundet und die Null einfach weggelassen. In solchen Fällen gibt es das gleiche Ergebnis zurück, das wir gesehen hätten, wenn wir trunc() verwendet hätten Funktion.

Wenn wir jedoch die Sekundenbruchteile leicht anpassen, sehen wir, dass das Ergebnis gerundet wird.

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

Ergebnis:

13.45 | 13.44-------+-------13.5 | 13.4

Es ist jedoch wichtig zu beachten, dass das Ergebnis vollständig davon abhängt, wie viele Sekundenbruchteile Sie im zweiten Argument angeben.

Hier ist noch einmal dasselbe Beispiel, aber mit zwei angegebenen Dezimalstellen.

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

Ergebnis:

13.45 | 13.44-------+-------13.45 | 13.44

In diesem Fall wurde nichts gerundet, weil ich die genaue Anzahl der von mir angegebenen Dezimalstellen angegeben habe.

Sekundenbruchteile hinzufügen

Nichts hindert Sie daran, mehr Sekundenbruchteile als in der ursprünglichen Zahl anzugeben.

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

Ergebnis:

13.45 | 13.44--------+--------13.450 | 13.440

In diesem Fall fügt es einfach eine Null zum rechten Teil der Sekundenbruchteile hinzu.

Hier ist ein Beispiel für die Angabe einer Anzahl von Dezimalstellen, wenn die ursprüngliche Zahl keine Sekundenbruchteile enthält.

SELECT round(12, 3); 

Ergebnis:

12.000

Negative Dezimalstellen

Folgendes passiert, wenn das zweite Argument ein negativer Wert ist.

SELECT round(789, -2); 

Ergebnis:

800

Hier sind noch mehr.

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

Ergebnis:

Runde | rund | rund | rund | rund-------+-------+-------+-------+-------800 | 790 | 500 | 490 | 0

Round() vs. Trunc()

In manchen Fällen die round() funktioniert möglicherweise ähnlich wie trunc() . Aber sie sind ganz anders.

Die round() Funktion rundet die Zahl. Die Zahl wird auf die nächste ganze Zahl oder auf die angegebene Anzahl von Dezimalstellen gerundet (je nachdem, ob Sie ihr ein Argument oder zwei Argumente geben).

Der trunc() Die Funktion hingegen schneidet die Zahl einfach in Richtung Null oder auf die angegebene Dezimalstelle ab. Es wird keine Rundung durchgeführt.

Hier ist ein Beispiel, um den Unterschied zu demonstrieren.

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

Ergebnis:

Runde | trunc-------+-------1.5 | 1.4