Konvertieren Sie die Gleitkommazahl in eine bestimmte Genauigkeit und kopieren Sie sie in eine Zeichenfolge


144

Ich habe beispielsweise eine Gleitkommazahl 135.12345678910. Ich möchte diesen Wert mit einer Zeichenfolge verknüpfen, möchte aber nur 135.123456789. Mit print kann ich dies einfach tun, indem ich Folgendes mache:

print "%.9f" % numvar

mit numvarmeiner ursprünglichen Nummer zu sein. Gibt es eine einfache Möglichkeit, dies zu tun?


2
% macht das genau -% ist nicht Teil der Druckfunktion, sondern der Zeichenfolge - siehe Python-Dokumente
michael_s

Antworten:


177

Bei Python <3 (z. B. 2.6 [siehe Kommentare] oder 2.7) gibt es zwei Möglichkeiten.

# Option one
older_method_string = "%.9f" % numvar

# Option two
newer_method_string = "{:.9f}".format(numvar)

Beachten Sie jedoch, dass für Python-Versionen über 3 (z. B. 3.2 oder 3.3) Option zwei bevorzugt wird .

Für weitere Informationen zu Option zwei empfehle ich diesen Link zur Formatierung von Zeichenfolgen aus der Python-Dokumentation .

Für weitere Informationen zu Option 1 reicht dieser Link aus und enthält Informationen zu den verschiedenen Flags .

Python 3.6 (offiziell im Dezember 2016 veröffentlicht) hat das fString-Literal hinzugefügt. Weitere Informationen finden Sie hier , wodurch die str.formatMethode erweitert wird (Verwendung von geschweiften Klammern, um f"{numvar:.9f}"das ursprüngliche Problem zu lösen).

# Option 3 (versions 3.6 and higher)
newest_method_string = f"{numvar:.9f}"

löst das Problem. Weitere Informationen finden Sie in der Antwort von @ Or-Duan. Diese Methode ist jedoch schnell .


1
Option zwei sollte sein newer_method_string = "{:.9f}".format(numvar)- beachten Sie die erforderlichen :, um das Feld und die Formatierung zu trennen. Ich habe das sowieso auf 2.7.5 getestet.
Caltor

1
Für Python 2.6 sollte Option zwei sein newer_method_string = "{0:.9f}".format(numvar)- notieren Sie die erforderliche 0 für den Feldnamen für diese ältere Version.
ttq

56

Python 3.6

Um dies zu verdeutlichen, können Sie die F-String- Formatierung verwenden. Dies hat fast die gleiche Syntax wie die formatMethode, macht es aber ein bisschen schöner.

Beispiel:

print(f'{numvar:.9f}')

Lesen Sie mehr über die neue f-Saite:

Hier ist ein Diagramm der Ausführungszeiten der verschiedenen getesteten Methoden (vom letzten Link oben):

Ausführungszeiten


52

Verwenden von round:

>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'

8

Es ist kein Druck, der die Formatierung übernimmt. Es ist eine Eigenschaft von Zeichenfolgen, sodass Sie sie einfach verwenden können

newstring = "%.9f" % numvar

Oder verwenden Sie die neue Formatierung. valueString = "{:. 9f}". Format (Nummer)
Zaren

8

Falls die Genauigkeit erst zur Laufzeit bekannt ist, ist diese andere Formatierungsoption hilfreich:

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'

3
Wenn Sie -method bevorzugen .format, beachten Sie, dass dies auch durch Verschachteln von Argumenten wie folgt erfolgen kann : '{:.{n}f}'.format(numvar,n=n).
Nivk

2

Um die Genauigkeit mit 9 Stellen einzustellen, erhalten Sie:

print "%.9f" % numvar

Rückgabegenauigkeit mit 2 Ziffern:

print "%.2f" % numvar 

Rückgabegenauigkeit mit 2 Ziffern und Float-konvertiertem Wert:

numvar = 4.2345
print float("%.2f" % numvar) 

-2

Die strFunktion hat einen Fehler. Bitte versuche folgendes. Sie sehen '0,196553', aber die richtige Ausgabe ist '0,196554'. Weil der strStandardwert der Funktion ROUND_HALF_UP ist.

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")

2
Was ist los mit .vs. ,Und wie ist es für Pauliwagos Frage relevant?
Peter Mortensen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.