2013-03-07 15 views
77

Ho un numero in virgola mobile, ad esempio 135.12345678910. Voglio concatenare quel valore a una stringa, ma voglio solo 135.123456789. Con la stampa, posso facilmente fare questo facendo qualcosa di simile:Convertire il numero in virgola mobile con una certa precisione, quindi copiare in stringa

print "%.9f" % numvar 

con numvar essere il mio numero originale. C'è un modo semplice per farlo?

+1

% fa esattamente questo -% non fa parte della funzione di stampa ma di stringa - vedi [Documenti Python] (http://docs.python.org/2/library/stdtypes.html#string-formatting-operations) –

risposta

97

con Python < 3 (ad esempio, 2.6 [vedi commenti ] o 2.7), ci sono due modi per farlo.

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

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

Ma nota che per le versioni Python superiori a 3 (ad esempio 3.2 o 3.3), l'opzione due è preferred.

Per ulteriori informazioni sull'opzione 2, suggerisco this link on string formatting from the python docs.

E per ulteriori informazioni sull'opzione 1, this link will suffice and has info on the various flags.

UPDATE: Python 3.6 (uscita ufficiale nel dicembre 2016), si aggiungerà la stringa f letterale, see more info here, che estende il metodo str.format (uso di parentesi graffe tale che f"{numvar:.9f}" risolve problema originale).

+1

la formattazione di vecchio stile funziona ancora in 3.2 –

+1

l'opzione due dovrebbe essere 'newer_method_string =" {: .9f} ". format (numvar)' - nota il richiesto ':' per separare il campo e la formattazione. Ho provato questo su 2.7.5 comunque. – Caltor

+1

Per python 2.6 l'opzione due dovrebbe essere 'newer_method_string =" {0: .9f} ". Format (numvar)' - notare lo 0 richiesto per field_name per questa versione precedente. – ttq

6

Non è la stampa che fa la formattazione, è una proprietà di stringhe, quindi si può semplicemente utilizzare

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

Oppure usa il nuova formattazione di stile. valueString = "{:. 9f}". format (numero) – Zaren

21

Utilizzando rotonda:

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

Nel caso la precisione non è nota fino runtime, questa altra opzione di formattazione è utile:

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

str funzione ha insetto. Per favore prova questo. Verrà visualizzato '0,196553' ma l'uscita destra è '0,196554'. Causa il valore predefinito della funzione str è ROUND_HALF_UP.

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

Per impostare precisione con 9 cifre, ottenere: precisione

print "%.9f" % numvar 

ritorno con 2 cifre: precisione

print "%.2f" % numvar 

ritorno con 2 cifre e galleggiare valore convertito:

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