In Python können Sie eine Fließkommazahl mit math.floor() und math.ceil() ab- und aufrunden.
Dieser Artikel hat folgenden Inhalt.
- Abrunden (= das Wort ergreifen):
math.floor()
- Aufrunden (= Obergrenze nehmen):
math.ceil()
- Unterschied zwischen math.floor() und int()
- Auf unendlich runden
Beachten Sie, dass math.floor() gegen minus unendlich und math.ceil() gegen plus unendlich rundet. Seien Sie vorsichtig beim Umgang mit negativen Werten.
Die Ergebnisse sind wie folgt zusammengefasst. Sie können int() verwenden, um auf Null zu runden (= abschneiden, von Unendlich wegrunden), aber Sie müssen eine Funktion definieren, um auf Unendlich zu runden. Einzelheiten werden später beschrieben.
print(math.floor(10.123))
# 10
print(math.floor(-10.123))
# -11
print(math.ceil(10.123))
# 11
print(math.ceil(-10.123))
# -10
print(int(10.123))
# 10
print(int(-10.123))
# -10
Sie can round() verwenden, um die Hälfte auf gerade zu runden.
Wenn Sie die Elemente eines NumPy-Arrays auf- und abrunden möchten, lesen Sie den following Artikel.
Abrunden (= das Wort ergreifen):math.floor()
Verwenden Sie math.floor() zum Abrunden. Zurückgegeben wird ein Integer int.
import math
print(math.floor(10.123))
# 10
print(math.floor(10.987))
# 10
print(type(math.floor(10.123)))
# <class 'int'>
Bei Einem Integer int WIRD der Wert unveränderlich zurückerstattet. Bei einem Objekt einer Klasse ohne die spezielle Methode __floor__(), wie z. B. einem String str, wird ein Fehler ausgelöst.
print(math.floor(10))
# 10
# print(math.floor('10'))
# TypeError: must be real number, not str
print(hasattr(10, '__floor__'))
# True
print(hasattr('10', '__floor__'))
# False
math.floor(x) gibt den Floor von x zurück, der größten Ganzzahl kleiner oder gleich x. Das heißt, es wird auf minus unendlich gerundet.
Für negative Werte sind die Ergebnisse wie folgt.
print(math.floor(-10.123))
# -11
print(math.floor(-10.987))
# -11
Wenn SIE Absolutwerte abschneiden wollen, ohne das Vorzeichen zu ändern, dh auf Null zu runden, verwenden SIE die unten beschriebene Methode int().
Aufrunden (= Obergrenze nehmen):math.ceil()
Verwenden Sie math.ceil() zum Aufrunden. Zurückgegeben wird ein Integer int.
print(math.ceil(10.123))
# 11
print(math.ceil(10.987))
# 11
print(type(math.ceil(10.123)))
# <class 'int'>
Bei Einem Integer int WIRD der Wert unveränderlich zurückerstattet. Bei einem Objekt einer Klasse ohne die spezielle Methode __ceil__(), wie z. B. einem String str, wird ein Fehler ausgelöst.
print(math.ceil(10))
# 10
# print(math.ceil('10'))
# TypeError: must be real number, not str
print(hasattr(10, '__ceil__'))
# True
print(hasattr('10', '__ceil__'))
# False
math.ceil(x) gibt die Obergrenze von x zurück, der kleinsten ganzen Zahl, die größer oder gleich x ist. Das heißt, es wird auf positiv unendlich gerundet.
Für negative Werte sind die Ergebnisse wie folgt.
print(math.ceil(-10.123))
# -10
print(math.ceil(-10.987))
# -10
Wenn Sie den Absolutwert ohne Vorzeichenwechsel aufrunden, also gegen unendlich runden wollen, müssen Sie eine neue Funktion definieren. Details werden unten beschrieben.
Unterschied zwischen math.floor() und int()
Sie können auch int() verwenden, um abzurunden.
int() gibt das gleiche Ergebnis wie math.floor() für positive Werte zurück.
print(int(10.123))
# 10
print(int(10.987))
# 10
print(int(10))
# 10
print(type(int(10.123)))
# <class 'int'>
Das Ergebnis für negative Werte unterscheidet sich von math.floor().
math.floor() rundet auf minus unendlich, int() rundet auf null.
print(int(-10.123))
# -10
print(int(-10.987))
# -10
int() kann auch einen String str in einen Integer int umwandeln.
Zeichenfolgen, die Dezimalzahlen darstellen, können nicht konvertiert werden, Zeichenfolgen in binärer oder hexadezimaler Notation können jedoch konvertiert werden, indem der zweite Parameterbasis angegeben wird.
print(int('10'))
# 10
# print(int('10.123'))
# ValueError: invalid literal for int() with base 10: '10.123'
print(int('FF', 16))
# 255
Auf unendlich runden
Bei der Berücksichtigung negativer Werte gibt es vier Arten des Auf- und Abrundens.
Wie oben beschrieben, können SIE die folgenden Funktionen nutzen.
- Runden gegen minus unendlich:
math.floor()
- Auf positiv unendlich runden:
math.ceil()
- Auf Nullrunden:
int()
- Auf unendlich runden
print(math.floor(10.123))
# 10
print(math.floor(-10.123))
# -11
print(math.ceil(10.123))
# 11
print(math.ceil(-10.123))
# -10
print(int(10.123))
# 10
print(int(-10.123))
# -10
Sie können beispielsweise eine Funktion definieren, sterben wie folgt gegen unendlich rundet.
def round_towards_infinity(x):
return int(math.copysign(math.ceil(abs(x)), x))
print(round_towards_infinity(10.123))
# 11
print(round_towards_infinity(-10.123))
# -11
Der Absolutwert von abs() wird von math.ceil() aufgerundet und von math.copysign() auf dasselbe Vorzeichen wie der ursprüngliche Wert zurückgegeben. Da math.copysign() eine Fließkommazahl float zurückgibt, wird sie von int() in eine Ganzzahl int umgewandelt.