2009-10-15 15 views
6

ich ein Array in Python haben, die einen Satz von Werten enthält, einige von ihnen sindwandeln exponentiellen in Python Dezimal

2.32313e + 07

2.1155e + 07

1.923e + 07

112,32

Wie konvertiere ich die exponentielle Formate zum Dezimalformat

Zusätzlich: Gibt es eine Möglichkeit, den Exponenten direkt in Dezimal konvertieren, wenn Sie in UNIX mit awk drucken?

+0

Möchten Sie in eine Zeichenfolge konvertieren, die einen Float mit bestimmter Genauigkeit darstellt? – SilentGhost

+0

ja. Und die Präzision kann eine beliebige Zahl sein – randomThought

+0

was bedeutet * irgendeine Zahl *? Kennst du diese Nummer? – SilentGhost

Antwort

5

Ich stelle mir vor, Sie haben eine Liste und nicht ein Array, aber hier macht es keinen großen Unterschied; in 2.6 und früheren Versionen von Python, so etwas wie:

>>> 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 

und in 2.6 oder höher, die .format Methode. Ich stelle mir vor, Sie sind sich bewusst, dass die Zahlen per se, als Zahlen, sind nicht in "Format" - es ist die Strings erhalten Sie durch Formatieren der Zahlen, z. für die Ausgabe, die in einem bestimmten Format sind. BTW, Varianten auf dieser %f können Sie die Anzahl der Dezimalstellen, Breite, Ausrichtung usw. steuern - schwer zu genau das, was Sie wollen, ohne weitere Angaben von Ihnen zu wünschen.

In awk können Sie printf verwenden.

1

Sie können locale.format() verwenden, um Ihre Zahlen für die Ausgabe zu formatieren. Dies hat den zusätzlichen Vorteil, dass es mit allen Gebietsschema-spezifischen Konventionen übereinstimmt, die bei der Darstellung der Nummern erwartet werden könnten. Wenn Sie die vollständige Kontrolle an dem bestimmten Ort haben möchten, an dem Sie die Ausgabe machen, wäre es besser mit der Druck "Format"% vars ...variant.

Beispiel:

>>> 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 Antwort auf den letzten Teil Ihrer Frage, awk die gleiche printf Format verwenden können:

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

Wo exponential_file enthält:

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

Sie kann die Umwandlung in eine Variable für die spätere Verwendung tun. Hier ist ein einfaches Beispiel:

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