Heim  >  Artikel  >  Backend-Entwicklung  >  Haben Sie die beiden Rundungsmethoden in Python gelernt?

Haben Sie die beiden Rundungsmethoden in Python gelernt?

PHPz
PHPznach vorne
2023-05-02 13:25:063499Durchsuche

1. Verwenden Sie „rund“

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}")

Die Ausgabe des obigen Programms ist wie folgt:

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.

Referenzen

[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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen