Convertir nombre à virgule flottante à une certaine précision, et ensuite copier à la chaîne
J'ai un nombre à virgule flottante, dire 135.12345678910
. Je veux concaténer la valeur à une chaîne, mais qui ne veulent 135.123456789
. Avec l'impression, je peux facilement le faire en faisant quelque chose comme:
print "%.9f" % numvar
avec numvar
être mon numéro d'origine. Est-il un moyen facile de faire cela?
- % fait exactement cela - % ne fait pas partie de la fonction d'impression mais de chaîne - voir Python docs
Vous devez vous connecter pour publier un commentaire.
Avec Python < 3 (par exemple 2.6 [voir commentaires] ou 2.7), il y a deux façons de le faire.
Mais notez que pour les versions de Python 3 ci-dessus (par exemple, 3.2 ou 3.3), l'option deux est préféré.
Pour plus d'informations sur l'option deux, je vous suggère de ce lien sur la chaîne de mise en forme de la documentation Python.
Et pour plus d'informations sur l'option un, ce lien suffira et a des infos sur les différents drapeaux.
Python 3.6 (officiellement publié en décembre 2016), a ajouté le
f
littéral de chaîne, voir plus d'informations ici, qui s'étend de lastr.format
méthode (utilisation d'accolades, tels quef"{numvar:.9f}"
résout le problème d'origine), qui est,résout le problème. Découvrez @Ou-Duan réponse pour plus d'info, mais cette méthode est rapide.
newer_method_string = "{:.9f}".format(numvar)
- notez l'requis:
de séparer le terrain et la mise en forme. J'ai testé cela sur 2.7.5 de toute façon.newer_method_string = "{0:.9f}".format(numvar)
-- notez le 0 requise pour la field_name pour cette ancienne version.Python 3.6 | 2017
Juste pour le rendre clair, vous pouvez utiliser f-chaîne mise en forme. C'est presque la même syntaxe que la
format
méthode, mais de le rendre un peu plus agréable.Exemple:
Plus de lecture sur la nouvelle f chaîne:
À l'aide de
round
:Ce n'est pas l'impression que le fait de la mise en forme, C'est une propriété de chaînes, de sorte que vous pouvez simplement utiliser
Dans le cas où la précision n'est pas connu avant l'exécution, cette autre option de mise en forme est utile:
.format
-méthode, notez que cela peut aussi être fait par l'imbrication des arguments comme:'{:.{n}f}'.format(numvar,n=n)
.Pour définir avec précision les 9 chiffres, obtenir:
Retour de précision avec 2 chiffres:
Retour de précision avec 2 chiffres et float valeur convertie:
La
str
fonction a un bug. Veuillez essayer ce qui suit. Vous verrez "0,196553", mais le droit de sortie est "0,196554'. Parce que lestr
de la fonction valeur par défaut est ROUND_HALF_UP..
vs,
? Et comment est-elle pertinente pour pauliwago la question?