Kategorien:

Numerische Funktionen (Rundung und Kürzung)

ROUND

Gibt gerundete Werte für Eingabeausdruck zurück.

Siehe auch:

CEIL , FLOOR , TRUNCATE , TRUNC

Syntax

ROUND( <input_expr> [, <scale_expr> ] )

Argumente

Eingabeausdruck

Der Wert oder Ausdruck, der verarbeitet werden soll. Der Datentyp sollte aus einem der numerischen Datentypen bestehen, z. B. FLOAT oder NUMBER.

Skalierungsausdruck

Die Anzahl der Stellen, die die Ausgabe nach dem Dezimalpunkt enthalten soll. Der Ausdruck sollte eine Ganzzahl von -38 bis +38 ergeben.

Der Standardwert für Skalierungsausdruck ist null. Das bedeutet, dass die Funktion alle Nachkommastellen entfernt.

Informationen zu negativen Zahlen finden Sie in den folgenden Nutzungshinweisen.

Rückgabewerte

Der Datentyp des zurückgegebenen Werts ist NUMBER(Genauigkeit, Skalierung).

Wenn die Eingabeskalierung größer oder gleich Null war, stimmt die Ausgabeskalierung im Allgemeinen mit der Eingabeskalierung überein.

Wenn die Eingabeskalierung negativ war, lautet die Ausgabeskalierung 0.

Beispiel:
  • Der von ROUND(3.14, 1) zurückgegebene Datentyp lautet NUMBER(4, 1).

  • Der von ROUND(3.14, 0) zurückgegebene Datentyp lautet NUMBER(4, 0).

  • Der von ROUND(33.33, -1) zurückgegebene Datentyp lautet NUMBER(5, 0).

Wenn die Skalierung Null ist, dann ist der Wert effektiv eine ganze Zahl.

Nutzungshinweise

  • Wenn Skalierungsausdruck negativ ist, wird die Anzahl der Stellen vor dem Dezimalpunkt angegeben, an die die Zahl angepasst werden soll. Wenn die Skalierung beispielsweise -2 beträgt, ist das Ergebnis ein Vielfaches von 100.

  • Wenn Skalierungsausdruck größer als die Skalierung des Eingabeausdrucks ist, hat die Funktion keine Auswirkungen.

  • Wenn entweder Eingabeausdruck oder Skalierungsausdruck NULL sind, lautet das Ergebnis NULL.

  • Bei Dezimalstellen werden halbe Punkte von Null weg gerundet. Beispielsweise wird -0,5 auf -1,0 gerundet.

  • Gleitkommazahlen sind approximierte Werte. Es kann nicht garantiert werden, dass eine Gleitkommazahl wie erwartet gerundet wird. Für eine Zurückgabe genauer Zahlen empfehlen wir, Gleitkommazahlen vor dem Runden in Dezimalzahlen umzuwandeln.

  • Wenn die Zahl durch Runden außerhalb des Wertebereichs des Datentyps liegt, wird ein Fehler zurückgegeben.

Beispiele

Das erste Beispiel ist ein einfaches Beispiel für ROUND mit der Standardzahl von Dezimalstellen (0):

SELECT ROUND(135.135), ROUND(-975.975);
+----------------+-----------------+
| ROUND(135.135) | ROUND(-975.975) |
|----------------+-----------------|
|            135 |            -976 |
+----------------+-----------------+

Im nächsten Beispiel wird ein Wertebereich für den Skalierungsparameter verwendet:

SELECT n, scale, ROUND(n, scale)
  FROM test_ceiling
  ORDER BY n, scale;
+----------+-------+-----------------+
|        N | SCALE | ROUND(N, SCALE) |
|----------+-------+-----------------|
| -975.975 |    -1 |        -980     |
| -975.975 |     0 |        -976     |
| -975.975 |     2 |        -975.98  |
|  135.135 |    -2 |         100     |
|  135.135 |     0 |         135     |
|  135.135 |     1 |         135.1   |
|  135.135 |     3 |         135.135 |
|  135.135 |    50 |         135.135 |
|  135.135 |  NULL |            NULL |
+----------+-------+-----------------+

Das nächste Beispiel zeigt, dass FLOAT-Werte nicht immer genau gespeichert werden. Wie Sie unten sehen können, wird .005 in einigen Fällen auf .01 gerundet, während in anderen Fällen auf 0 gerundet wird. Der Unterschied hängt nicht mit der Rundung zusammen; vielmehr hat er mit der zugrunde liegenden Darstellung der Gleitkommazahl zu tun. 1.005 wird als Zahl gespeichert, die etwas kleiner als 1.005 ist (ungefähr 1.004999). Der DECIMAL-Wert wird jedoch als exakte Zahl gespeichert und wie in allen Fällen erwartet auf .01 gerundet.

Erstellen und laden Sie eine Tabelle:

CREATE OR REPLACE TEMP TABLE rnd1(f float, d DECIMAL(10, 3));
INSERT INTO rnd1 (f, d) VALUES
      ( -10.005,  -10.005),
      (  -1.005,   -1.005),
      (   1.005,    1.005),
      (  10.005,   10.005)
      ;

Zeigen Sie Beispiele für Unterschiede zwischen gerundeten FLOAT-Werten und gerundeten DECIMAL-Werten an:

select f, round(f, 2), 
       d, round(d, 2) 
    from rnd1 
    order by 1;
+---------+-------------+---------+-------------+
|       F | ROUND(F, 2) |       D | ROUND(D, 2) |
|---------+-------------+---------+-------------|
| -10.005 |      -10.01 | -10.005 |      -10.01 |
|  -1.005 |       -1    |  -1.005 |       -1.01 |
|   1.005 |        1    |   1.005 |        1.01 |
|  10.005 |       10.01 |  10.005 |       10.01 |
+---------+-------------+---------+-------------+