In den meisten Fällen verwenden wir „rund“, um Dezimalzahlen beizubehalten, aber dies entspricht nicht den Regeln unseres mathematischen Wissens.
round(number[, ndigits])
round() rundet die Zahl (normalerweise eine Gleitkommazahl) gemäß den folgenden Regeln (Python3):
Lassen Sie uns über den Fall sprechen, in dem ndigits nicht 0 ist:
Wenn die letzte Ziffer der reservierten Ziffer kleiner ist größer oder gleich 4. Wenn die letzte Ziffer der reservierten Ziffer gleich 5 ist und nach der Ziffer eine Zahl steht, wird ein Übertrag durchgeführt, z. B. Round(5.2151,2) = 5.22
Wenn die letzte Ziffer Ist die reservierte Ziffer größer oder gleich 6, wird ein Übertrag durchgeführt. Zum Beispiel: Round(5.216,2) = 5.22
>>> round(5.214,2) 5.21 >>> round(5.215,2) 5.21 >>> round(5.2151,2) 5.22 >>> round(5.216,2) 5.22 >>>
Aber es gibt Ausnahmen von der obigen Regel 2, wie zum Beispiel:
>>> round(0.645,2) 0.65 >>>
Der Grund dafür ist, dass Gleitkommazahlen nur ungefähre Werte darstellen können, wenn sie binär ausgedrückt werden Wir sehen 0,645, in Wirklichkeit speichert Python 0,645000000000000017763568394002504646778106689453125. Python speichert Gleitkommazahlen gemäß dem IEEE754-Standard.
Lassen Sie uns über den Fall sprechen, in dem ndigits 0 oder Keine ist:
Wenn die letzte Ziffer der reservierten Ziffer kleiner oder gleich 4 ist, verwerfen Sie sie, z. B. Round(1.4) = 1
Wenn die letzte Ziffer der reservierten Ziffer ist gleich 5Und es gibt keine Zahl danach, dann wird die nächste gerade Zahl genommen, wie zum Beispiel runde(1,5)=2, runde(2,5)=2
Wenn die letzte Ziffer der reservierten Ziffer gleich 5 ist und eine Zahl dahinter steht, wird die nächste Ziffer genommen, z. B. rund( 2,51)=3
Wenn die letzte Ziffer der reservierten Ziffer größer oder gleich 6 ist, dann Übertrag. Beispiel: Round(1.6) = 2
>>> round(1.5) 2 >>> round(1.4) 1 >>> round(1.6) 2 >>> round(2.5) 2 >>> round(2.51) 3 >>>
Bitte beachten Sie, dass das beibehaltene Ergebnis der f-Zeichenfolge mit rund:
>>> f"{1.5:.0f}" '2' >>> f"{2.5:.0f}" '2' >>> f"{2.51:.0f}" '3'
übereinstimmt. Wie erhält man also eine Methode, die mit den mathematischen Rundungsregeln konsistent ist? Bitte verwenden Sie Methode zwei:
2. Dezimalzahl verwenden
Diese Methode setzt voraus, dass die Dezimalzahl zuerst in eine Zeichenfolge umgewandelt wird, damit Gleitkommazahlen genau dargestellt werden können.
import decimal # 修改舍入方式为四舍五入 decimal.getcontext().rounding = "ROUND_HALF_UP" x = "0.645" x1 = decimal.Decimal(x).quantize(decimal.Decimal("0.00")) print(f"{x} 的近似值为 {x1}") y = "2.5" y1 = decimal.Decimal(y).quantize(decimal.Decimal("0")) print(f"{y} 的近似值为 {y1}")
0.645 的近似值为 0.65 2.5 的近似值为 3
Es entspricht vollständig unserer mathematischen Rundung.
Abschlusswörter
Gleitkommazahlen können nur Näherungswerte in binärer Darstellung darstellen. Zu diesem Punkt können Sie das Dokument [1] überprüfen. Nachdem Sie die Darstellung von Gleitkommazahlen verstanden haben, wird es Ihnen nicht mehr so seltsam vorkommen, wenn Sie sich das Runden ansehen.
[1] Dokumentation: https://docs.python.org/3/tutorial/floatingpoint.html#tut-fp-issues
Das obige ist der detaillierte Inhalt vonHaben Sie die beiden Rundungsmethoden in Python gelernt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!