Heim >Backend-Entwicklung >Python-Tutorial >Wie kürze ich Float-Werte in Python ohne Rundung?

Wie kürze ich Float-Werte in Python ohne Rundung?

Susan Sarandon
Susan SarandonOriginal
2024-11-05 19:51:02744Durchsuche

How to Truncate Float Values in Python Without Rounding?

Wie werden Float-Werte ohne Rundung abgeschnitten?

Das Abschneiden eines Float-Werts auf eine bestimmte Anzahl von Dezimalstellen ohne Rundung kann in Python mit der Funktion „truncate(“ erreicht werden. )'-Funktion. Diese Funktion benötigt zwei Argumente: den zu kürzenden Gleitkommawert und die Anzahl der beizubehaltenden Dezimalstellen. Hier ist eine Implementierung der Funktion, die intelligente Rundung verwendet:

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]])

Erklärung

Die Funktion wandelt den Gleitkommawert in einen String um und stellt so sicher, dass die volle Genauigkeit erhalten bleibt. Anschließend wird die Zeichenfolge in drei Teile unterteilt: den ganzzahligen Teil, den Dezimalpunkt und die Dezimalstellen. Es behält die Dezimalstellen bei, füllt bei Bedarf mit Nullen auf und fügt die Teile wieder zusammen, um die abgeschnittene Zeichenfolge zu bilden.

Intelligente Rundung

In bestimmten Fällen ist es nicht möglich, eine Gleitkommazahl genau als Dezimalzahl darzustellen Notation. Beispielsweise kann die Genauigkeit von 0,3 genau als IEEE-Float-Wert, jedoch nicht als Dezimalzahl dargestellt werden. In solchen Fällen verwendet die Funktion die von Python 2.7 und höher bereitgestellte Standardoperation zur Zeichenfolgenformatierung. Diese Operation wählt auf intelligente Weise die nächstgelegene Dezimaldarstellung der Gleitkommazahl ohne Rundung aus.

Alternative Methode für ältere Python-Versionen

Wenn Sie Python-Versionen vor 2.7 oder 3.0 verwenden, können Sie die abschneiden float und runde es auf eine große Anzahl von Dezimalstellen (z. B. 12), bevor du das Ergebnis als String formatierst. Dieser Ansatz ist weniger präzise, ​​funktioniert aber in den meisten Fällen gut:

def truncate(f, n):
    '''Truncates/pads a float f to n decimal places without rounding'''
    s = '%.12f' % f
    i, p, d = s.partition('.')
    return '.'.join([i, (d+'0'*n)[:n]])

Vorbehalte

Beachten Sie, dass die intelligente Rundung zu falsch positiven Ergebnissen führen kann, wenn Zahlen gerundet werden, die nicht vorgesehen waren. Um dies zu vermeiden, kann eine feste Genauigkeit verwendet werden. Darüber hinaus können frühere Python-Versionen ungenaue Dezimaldarstellungen erzeugen. In solchen Fällen wird die Verwendung des 12-stelligen Workarounds empfohlen.

Das obige ist der detaillierte Inhalt vonWie kürze ich Float-Werte in Python ohne Rundung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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