Heim > Artikel > Backend-Entwicklung > Wie kann man Float-Werte ohne Rundung präzise kürzen?
Das Abschneiden von Gleitkommawerten oder das Entfernen von Ziffern über eine bestimmte Anzahl von Dezimalstellen hinaus ist ein häufiger Vorgang in der Programmierung. Aufgrund der Einschränkungen der Gleitkommadarstellung kann es jedoch eine Herausforderung sein, eine genaue Kürzung ohne Rundung zu erreichen.
Betrachten Sie das Beispiel:
1.923328437452 -> 1.923
Ein Naiv Der Ansatz bestünde darin, den Gleitkommawert in einen String umzuwandeln und ihn abzuschneiden. Dies kann jedoch aufgrund der ungenauen Natur von Gleitkommadarstellungen zu Fehlern führen. Unterschiedliche Gleitkommawerte können dieselbe binäre Darstellung haben, was zu mehrdeutiger Kürzung führt.
Für Python-Versionen 2.7 und höher bietet die folgende Funktion eine genaue Kürzung ohne Rundung:
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]])
Der Kern dieser Methode besteht darin, die Gleitkommazahl mithilfe von '{}'.format(f) in einen String umzuwandeln und den String auf die gewünschte Anzahl von Dezimalstellen zu kürzen. Für Werte in wissenschaftlicher Notation ('e' oder 'E') wird die Syntax '{0:.{1}f}'.format(f, n) verwendet, um die Genauigkeit anzugeben.
In seltenen Fällen können Gleitkommazahlen, die sehr nahe an runden Zahlen liegen, dennoch falsch abgeschnitten werden. Geben Sie in solchen Fällen eine höhere Genauigkeit an, um sicherzustellen, dass das Runden während der String-Konvertierung keinen Einfluss auf das Ergebnis hat.
Für Python-Versionen unter 2.7 ist das Runden eine weniger genaue Methode die Gleitkommazahl auf 12 Dezimalstellen vor dem Abschneiden:
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]])
Dieser Code bietet eine robuste Lösung zum Abschneiden von Gleitkommawerten ohne Rundung und gewährleistet so eine genaue Kürzung für eine Vielzahl von Eingaben.
Das obige ist der detaillierte Inhalt vonWie kann man Float-Werte ohne Rundung präzise kürzen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!