J'utilise "g" code> pour formater des valeurs de point flottant, mais il passe en formatage scientifique trop tôt pour moi - au 5ème chiffre:
>>> format(0.0001, "g")
'0.0001'
>>> format(0.00001, "g")
'1e-05'
3 Réponses :
"%e" % n if n and log10(abs(n)) < -5 else ("%f" % n).rstrip("0")
+1 - ou, en tant que doublure: (('% f', '% e') [log10 (n) <-5])% n code> - Cependant, la solution fonctionne avec positif
n code> seulement.
@eumiro: Bon point sur les numéros négatifs (mis à jour la réponse), mais je n'aime pas vraiment votre doublure. L'indexation d'une tuple par des valeurs booléennes est juste ... non pythonique.
.RStrip ("0") doit être ajouté à la sortie "% F", de sorte que le résultat ressemble plus à "% g"
Un chèque pour n == 0 est également nécessaire (journal non défini pour 0)
Si vous utilisez Python 2.7, vous pouvez utiliser la formatage de la chaîne avancée mini-langue : Vous pouvez alors spécifier la valeur requise du numéro numéro code> et
largeur code> dynamique . p> p>
Je veux toujours conserver une notation exponentielle pour de petits nombres comme 1E-25 et ne pas afficher 0.0000000000 à la place.
J'ai eu la même question. P>
regarder la documentation python em> Il semble que g fort> prend également en charge les valeurs de précision: P>
format général. Pour une précision donnée p> = 1 em>, cela arrondit le
nombre à Je ne sais pas, pourquoi les autres réponses n'utilisent pas cela et je ne suis pas très expérimenté dans python em>, mais ça marche. P>
Ceci peut être simplement obtenu en utilisant le format
(0.00001, '.10g') code> où 10 est la précision que vous voulez. P>
Merci d'avoir souligné cela. Je trouve que certaines des formatage de chaînes les plus obscures mal documentées ou difficiles à trouver. Cela fonctionne pour moi où j'utilise des pandas pour créer un CSV: dataframe.to_csv (float_format = "%. 12g") code>
J'ai du mal à comprendre comment g avec la précision fonctionne: f "{10.554545: 2g}" -> '10 .5545 'F "{10.554545: .2G}" ->' 11 'F "{10.554500: 2G}" ->' 10.5545 'F "{10.554500: 3G}" -> '10 .5545' F "{10.554500: 10G}" -> '10.5545' Il semble donc que ce ne soit pas vraiment de précision.
On dirait que vous avez oublié d'inclure un point après le côlon pendant plusieurs exemples? Ou était-ce juste à des fins de test? Je pense que le point est nécessaire et quand il est là, cela fait ce qui est attendu: il tourne 10.554545 code> dans
11 code> (deux chiffres significatifs).
f "{10.554545: .4g}" code> entraînera probablement
10.55 code>. Je n'ai pas essayé, cependant, c'est juste mon hypothèse.
Selon un commentaire ci-dessous,
". 6g" code> est une chaîne de format valide