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

Haben Sie die beiden Rundungsmethoden in Python gelernt?

PHPz
Freigeben: 2023-05-02 13:25:06
nach vorne
3565 Leute haben es durchsucht

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])
Nach dem Login kopieren

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
>>>
Nach dem Login kopieren

Aber es gibt Ausnahmen von der obigen Regel 2, wie zum Beispiel:

>>> round(0.645,2)
0.65
>>>
Nach dem Login kopieren

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
>>>
Nach dem Login kopieren

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'
Nach dem Login kopieren

ü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}")
Nach dem Login kopieren

Die Ausgabe des obigen Programms ist wie folgt:

0.645 的近似值为 0.65
2.5 的近似值为 3
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:51cto.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage