2009-10-15 15 views
6

Ho un array in pitone che contiene un insieme di valori, alcuni di loro sonoconvertire esponenziale decimale in pitone

2.32313e + 07

2.1155e + 07

1.923e + 07

112,32

Come faccio a convertire il formati esponenziali in formato decimale

Additional: Esiste un modo per convertire l'esponente direttamente in decimale quando si stampa in UNIX con awk?

+0

vuoi convertire in stringa rappresentando un float con una certa precisione? – SilentGhost

+0

sì. E la precisione può essere qualsiasi numero – randomThought

+0

che cosa significa * qualsiasi numero * significa? conosci questo numero? – SilentGhost

risposta

5

Immagino di avere una lista piuttosto che un array, ma qui non fa molta differenza; in 2.6 e versioni precedenti di Python, qualcosa di simile:

>>> L = [2.32313e+07, 2.1155e+07, 1.923e+07, 11856, 112.32] 
>>> for x in L: print '%f' % x 
... 
23231300.000000 
21155000.000000 
19230000.000000 
11856.000000 
112.320000 

e in 2.6 o versione successiva, il metodo .format. Immagino che tu sappia che i numeri di per sé, come numeri, non sono in alcun "formato": sono le stringhe ottenute formattando i numeri, ad es. per l'output, che sono in qualche formato. A proposito, le varianti su quello %f possono consentire di controllare il numero di decimali, larghezza, allineamento, ecc. - difficile suggerire esattamente ciò che si può desiderare senza ulteriori specifiche da parte dell'utente.

In awk, è possibile utilizzare printf.

1

È possibile utilizzare locale.format() per formattare i numeri per l'output. Questo ha l'ulteriore vantaggio di essere coerente con qualsiasi convenzione specifica locale che potrebbe essere prevista nella presentazione dei numeri. Se si desidera il controllo completo nel luogo specifico in cui si esegue l'output, si sarebbe meglio con il stampa "formato"% vars ...variant.

Esempio:

>>> import locale 
>>> locale.setlocale(locale.LC_ALL, "") 
'C/UTF-8/C/C/C/C' 
>>> locale.format("%f", 2.32313e+07, 1) 
'23231300.000000' 
0

In risposta all'ultima parte della tua domanda, awk possibile utilizzare lo stesso printf formato:

awk '{printf "%f\n",$1}' exponential_file 

Dove exponential_file contiene:

2.32313e+07 
2.1155e+07 
1.923e+07 
11856 
112.32 

È può fare la conversione in una variabile per l'uso in seguito. Ecco un esempio semplicistico:

awk '{n = sprintf("%f\n",$1); print n * 2}' exponential_file 
Problemi correlati