2009-10-15 76 views
6

tengo una matriz en Python que contiene un conjunto de valores, algunos de ellos sonconvertir exponencial a decimal en Python

2.32313e + 07

2.1155e + 07

1.923e + 07

112,32

¿Cómo convierto el formatos exponenciales al formato decimal

adicional: ¿Hay alguna manera de convertir el exponente directamente a decimal cuando se imprime en UNIX con awk?

+0

¿desea convertir a cadena que representa un flotador con cierta precisión? – SilentGhost

+0

sí. Y la precisión puede ser cualquier número – randomThought

+0

¿Qué significa * cualquier número *? ¿Conoces este número? – SilentGhost

Respuesta

5

me imagine que tiene una lista en lugar de una matriz, pero aquí no tiene mucho de una diferencia; en 2.6 y versiones anteriores de Python, algo así como:

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

y en 2.6 o posterior, el método .format. Me imagino que sabe que los números en sí, como números, no están en ningún "formato": es el strings que obtiene formateando los números, p. para salida, que están en algún formato. Por cierto, las variantes en ese %f pueden permitirle controlar el número de decimales, el ancho, la alineación, etc. - difícil sugerir exactamente lo que puede desear sin más especificaciones suyas.

en AWK, puede utilizar printf.

1

Puede utilizar locale.format() para dar formato a los números para la salida. Esto tiene el beneficio adicional de ser coherente con las convenciones específicas de la configuración regional que podrían esperarse en la presentación de los números. Si desea un control completo en el lugar específico donde realiza la salida, sería mejor que con el "formato" de impresión % vars ...variant.

Ejemplo:

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

En respuesta a la última parte de su pregunta, awk puede utilizar el mismo printf formato:

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

Dónde exponential_file contiene:

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

Usted puede hacer la conversión en una variable para usar más tarde. Aquí hay un ejemplo simplista:

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