Wie kann ich einen Float-Wert in Python kürzen, ohne das Ergebnis zu runden?

Patricia Arquette
Freigeben: 2024-11-06 00:03:02
Original
930 Leute haben es durchsucht

How can I truncate a float value in Python without rounding the result?

Wie schneide ich Gleitkommawerte ohne Rundung ab?

So entfernen Sie Ziffern aus einer Gleitkommazahl und haben eine feste Anzahl von Nachkommastellen, z. B. Konvertieren von 1,923328437452 in 1,923 können Sie die folgende Funktion verwenden:

def truncate(f, n):
    '''Truncates/pads a float f to n decimal places without rounding'''
    s = '{}'.format(f)
    if 'e' in s or 'E' in s:
        return '{0:.{1}f}'.format(f, n)
    i, p, d = s.partition('.')
    return '.'.join([i, (d+'0'*n)[:n]])
Nach dem Login kopieren

Diese Funktion erreicht eine Kürzung, indem sie den Gleitkommawert in einen String umwandelt, ihn in Ganzzahl-, Dezimalpunkt- und Dezimalstellenkomponenten aufteilt und diese dann mit der gewünschten Zahl neu kombiniert von Dezimalstellen. Wenn die Gleitkommazahl zu groß oder zu klein ist, um ohne Exponentialschreibweise dargestellt zu werden, wird sie zunächst in dieses Format konvertiert.

Hinweis: Diese Funktion ist mit Python 2.7 und 3.1 kompatibel. Für frühere Versionen kann eine etwas ungenauere Problemumgehung verwendet werden, bei der vor der Kürzung auf 12 Dezimalstellen gerundet wird.

Die Methode verstehen

Um die Methode hinter der Kürzungsfunktion zu verstehen, ist es wichtig, sie zu erkennen dass Gleitkommazahlen im Speicher des Computers als binäre Darstellung gespeichert werden, die möglicherweise nicht immer genau mit der beabsichtigten Dezimaldarstellung übereinstimmt. Beispielsweise werden sowohl 0,3 als auch 0,29999999999999998 mit derselben Binärdarstellung gespeichert.

Um diese Mehrdeutigkeit aufzulösen, verwendet die Funktion ausgefeilte Algorithmen, um die „schönste“ Dezimaldarstellung für die Kürzung auszuwählen. Dies wird durch die Konvertierung des Floats in einen String mithilfe der standardmäßigen String-Formatierungsoperation erreicht, die die Formatspezifikationen „g“ nachahmt und automatisch die beste Darstellung auswählt.

Es gibt jedoch bestimmte Randfälle, in denen sogar diese Methode zum Ergebnis führen kann in „Falsch-Positiven“, also Zahlen, die nicht gerundet werden sollten. In diesen Fällen kann die Angabe einer festen Genauigkeit vor dem Abschneiden erforderlich sein.

Zusätzliche Hinweise

Das Abschneiden einer Gleitkommazahl ohne Rundung ist wichtig, wenn es um sehr spezifische Gleitkommawerte geht, die absichtlich nahe an der Rundung liegen Zahlen, sind ihnen aber nicht gleich. Für die meisten praktischen Anwendungen reicht normalerweise das Runden aus.

Die hier vorgestellte Funktion ignoriert auch verlorene Ziffern beim Abschneiden, was sich vom Runden unterscheidet, bei dem die verbleibenden Ziffern angepasst werden. Dieser Ansatz stellt sicher, dass der gekürzte Wert seine ursprüngliche Genauigkeit an den angegebenen Dezimalstellen behält.

Das obige ist der detaillierte Inhalt vonWie kann ich einen Float-Wert in Python kürzen, ohne das Ergebnis zu runden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!