Se si è sicuri che non è necessario più di un numero fisso di posti dopo il punto decimale, quindi:
>>> from numpy import r_
>>> a = r_[10**(-9), 10**(-3), 3*10**(-3), 6*10**(-3), 9*10**(-3), 1.5*10**(-2)]
>>> for x in a: print "%.1e"%x
...
1.0e-09
1.0e-03
3.0e-03
6.0e-03
9.0e-03
1.5e-02
Il fermo qui è che si dovesse utilizzare %.0e
come formato, l'ultima numero sarebbe essere stampato come 1e-2
EDIT: Dal momento che si sta utilizzando matplotlib
, allora è una storia diversa: è possibile utilizzare il motore di rendering di TeX. Un esempio veloce-e-sporco:
fig = plt.figure()
ax = fig.add_subplot(111)
x = 1.5*10**(-2)
l = ("%.0e"%x).split("e")
x_str = r"$ %s \times 10^{%s}$" % (l[0], l[1])
ax.set_title(x_str)
plt.show()
che sarebbe davvero un po 'più pulito con la nuova formattazione .format
stringa.
EDIT2: Solo per completezza e riferimento futuro, qui è il mio introito sulla strada del PO dai commenti:
x = 1.5*10**(-2)
l = ("%.0e"%x).split("e")
x_str = r"$%s \times 10^{%s}$" % (l[0], str(int(l[1])))
Qui sto conversione in un int e indietro per evitare gli zeri iniziali: -02
- >-2
ecc
fonte
2013-02-22 09:16:41
puoi anche provare str.format - http://docs.python.org/2/library/string.html#formatstrings – dmg
Come stai creando la trama? E 'solo una trama simile ad ASCII o stai usando 'matplotlib' o altre librerie? – Bakuriu
funziona ''% s 10^(% s)'% (numero1, numero2)' funziona? – dmg