Die Python-Funktion round(number, ndigits) rundet eine Zahl auf eine angegebene Anzahl von Nachkommastellen. Mit positivem ndigits rundet sie hinter dem Komma, mit negativem ndigits vor dem Komma. Wichtig zu wissen: Pythons round() nutzt Banker's Rounding (round-half-to-even) — nicht das aus der Schule bekannte „kaufmännische" Aufrunden.

Einleitung

round() macht zwei Dinge je nach Eingabe:

  • Mit int: round(7)7 (no-op, Identität).
  • Mit float: rundet auf die angegebene Stelle, liefert float.
  • Mit Custom-Klasse: ruft __round__() auf der Klasse.

Die wichtigste Eigenheit: Python rundet bei 0.5-Hälften zur nächsten geraden Zahl (Banker's Rounding):

  • round(0.5)0 (nicht 1)
  • round(1.5)2
  • round(2.5)2 (nicht 3)

Das ist statistisch fairer als immer aufzurunden — vermeidet Bias bei vielen Rundungen. Wer kaufmännisches Runden will, nutzt decimal.Decimal mit explizitem Rounding-Mode oder int(x + 0.5).

Mit negativem ndigits rundet round() auf Zehner-, Hunderter-, Tausender-Stellen.

Syntax

Python Syntax
round(number)              # auf Ganzzahl
round(number, ndigits)     # auf ndigits Nachkommastellen
Parameter
number

Zahl (int, float, Decimal oder Objekt mit __round__).

ndigits

(Optional) Anzahl Nachkommastellen. Negativ für Stellen vor dem Komma. None (Default) liefert int.

Rückgabewert

  • Ohne ndigits (oder None): int.
  • Mit ndigits: derselbe Typ wie das Input (float bleibt float, Decimal bleibt Decimal).

Beispiele

Standard-Verwendung

Mit positivem ndigits wird hinter dem Komma gerundet — so wie meistens erwartet:

Python Beispiel
print(round(3.14159))
print(round(3.14159, 2))
print(round(3.14159, 4))
print(round(0.123456, 3))
Output
3
3.14
3.1416
0.123

Banker's Rounding bei .5

Hier kommt die Überraschung — Python rundet 0.5 zur nächsten geraden Zahl:

Python Beispiel
for n in [0.5, 1.5, 2.5, 3.5, 4.5]:
    print(n, "→", round(n))
Output
0.5 → 0
1.5 → 2
2.5 → 2
3.5 → 4
4.5 → 4

Negative Stellen — vor dem Komma

Mit negativem ndigits rundet round() zu Zehnern, Hundertern usw.:

Python Beispiel
print(round(1234.567, -1))   # auf Zehner
print(round(1234.567, -2))   # auf Hunderter
print(round(1234.567, -3))   # auf Tausender
Output
1230.0
1200.0
1000.0

Praktische Beispiele

Float-Ungenauigkeit beim Runden

round() rundet auf das nächste darstellbare Float — manche Werte zeigen Float-Artefakte:

Python Beispiel
# 2.675 ist intern 2.6749999... — wird daher zu 2.67 abgerundet
print(round(2.675, 2))
Output
2.67

Kaufmännisches Runden mit Decimal

Wer „immer aufrunden bei 0.5" braucht, nutzt decimal.Decimal mit explizitem Modus:

Python Beispiel
from decimal import Decimal, ROUND_HALF_UP

for n in [Decimal("0.5"), Decimal("1.5"), Decimal("2.5")]:
    print(n, "→", n.quantize(Decimal("1"), rounding=ROUND_HALF_UP))
Output
0.5 → 1
1.5 → 2
2.5 → 3

Custom-Klasse mit round

Eigene Klassen können __round__ implementieren — dann funktioniert round() direkt:

Python Beispiel
class Money:
    def __init__(self, amount):
        self.amount = amount

    def __round__(self, ndigits=2):
        return Money(round(self.amount, ndigits))

    def __repr__(self):
        return f"Money({self.amount})"

m = Money(12.3456)
print(round(m))
print(round(m, 1))
Output
Money(12.35)
Money(12.3)

Praktische Hinweise

  • Banker's Rounding ist Default — sorgt statistisch für faire Verteilung, kann aber überraschen.
  • Float-Ungenauigkeit: round(2.675, 2) liefert 2.67, nicht 2.68. Für exakte Beträge Decimal nutzen.
  • Negatives ndigits rundet vor dem Komma — round(1234, -2)1200.
  • int(x) schneidet Richtung 0 ab, math.floor()/math.ceil() runden in eine Richtung — round() ist nur eine von mehreren Optionen.
  • Verwandte Funktionen: math.floor(), math.ceil(), math.trunc(), decimal.Decimal.quantize().
/ Weiter

Zurück zu Builtin Functions

Zur Übersicht