2013-03-07 8 views
77

Ich habe eine Gleitkommazahl, sagen wir 135.12345678910. Ich möchte diesen Wert zu einer Zeichenfolge verketten, aber nur 135.123456789 wollen. Mit Druck kann ich tun dies leicht durch etwas zu tun, wie:Konvertieren Sie die Fließkommazahl in eine bestimmte Genauigkeit und kopieren Sie sie in den String

print "%.9f" % numvar 

mit numvar ist meine ursprüngliche Zahl. Gibt es einen einfachen Weg, dies zu tun?

+1

% genau das ist -% ist nicht Teil der Druckfunktion, sondern von String - siehe [Python docs] (http://docs.python.org/2/library/stdtypes.html#string-formatting-operationen) –

Antwort

97

Mit Python < 3 (zB 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) 

Aber beachten Sie, dass für Python-Versionen über 3 (zum Beispiel 3.2 oder 3.3), Option zwei ist preferred.

Für weitere Informationen zu Option zwei, empfehle ich this link on string formatting from the python docs.

Und für weitere Informationen über Option eins, this link will suffice and has info on the various flags.

UPDATE: Python 3.6 (offizielle Veröffentlichung im Dezember 2016), fügt den f Stringliteral, see more info here, die die str.format Methode (Verwendung von geschweiften Klammern, so dass f"{numvar:.9f}" ursprüngliches Problem löst) erstreckt.

+1

alte Stil Formatierung funktioniert immer noch in 3.2 –

+1

Option zwei sollte 'newer_method_string =" {: .9f} "sein. Format (numvar)' - notieren Sie die erforderlichen ':' um das Feld und die Formatierung zu trennen. Ich habe dies auf 2.7.5 sowieso getestet. – Caltor

+1

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

6

Es ist nicht drucken, das die Formatierung der Fall ist, es ist eine Eigenschaft von Strings, so dass Sie nur

newstring = "%.9f" % numvar 
+0

Oder benutze die neue Formatierung valueString = "{:. 9f}". format (number) – Zaren

21

rund Mit verwenden können:

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

Falls die Präzision nicht erst zur Laufzeit, die andere Formatierungsoption ist nützlich bekannt ist:

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

str Funktion Bug hat. Bitte versuchen Sie es. Sie sehen "0,196553", aber die richtige Ausgabe ist "0,196554". Ursache Der Standardwert für die str-Funktion ist ROUND_HALF_UP.

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

einzustellen Präzision mit 9 Ziffern, erhalten:

print "%.9f" % numvar 

Return Präzision mit 2 Stellen:

print "%.2f" % numvar 

Return Präzision mit 2 Ziffern und konvertierte Wert float:

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