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