2014-06-09 2 views
2

Je veux arrondir le flottant exponentiel à deux représentation décimale en Python.float exponentiel rond à 2 décimales

4.311237638482733e-91 --> 4.31e-91 

Connaissez-vous un truc rapide pour le faire?
Des solutions simples comme round(float, 2) et "%.2f"%float ne fonctionnent pas avec des flotteurs exponentielles:/

EDIT: Il est pas arrondi flottant, mais arrondi flottant exponentielle, donc ce n'est pas la même question que How to round a number to significant figures in Python

+3

' "% s" % de 4.311237638482733e-91 -> '4.31e-91'' 'f' n'est * pas * le seul moyen de formater un flottant. voir [ici] (https://docs.python.org/2/library/stdtypes.html#string-formatting). Aussi 'str.format' est plus puissant. – Bakuriu

+3

'format (4.311237638482733e-91, '.2e')' ?? –

+0

thx pour la réponse rapide! – Leszek

Répondre

4

Vous pouvez utilisez le spécificateur de format g, qui choisit entre la notation exponentielle et la notation "usuelle" en fonction de la précision, et spécifiez le nombre de chiffres significatifs:

>>> "%.3g" % 4.311237638482733e-91 
'4.31e-91' 

Si vous voulez toujours représenter le nombre en notation exponentielle, utilisez le spécificateur de format e, alors que fjamais utilise la notation exponentielle. La liste complète des possibilités est décrite here.

Notez également qu'au lieu de % la mise en forme de style, vous pouvez utiliser str.format:

>>> '{:.3g}'.format(4.311237638482733e-91) 
'4.31e-91' 

str.format est plus puissant et personnalisable que % la mise en forme de style, et il est également plus cohérente. Par exemple:

>>> '' % [] 
'' 
>>> '' % set() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: not all arguments converted during string formatting 
>>> ''.format([]) 
'' 
>>> ''.format(set()) 
'' 

Si vous n'aimez pas appeler une méthode sur une chaîne de caractères que vous pouvez utiliser la format fonction intégrée:

>>> format(4.311237638482733e-91, '.3g') 
'4.31e-91'