web-dev-qa-db-fra.com

Convertir un nombre à virgule flottante avec une certaine précision, puis copier en chaîne

J'ai un nombre à virgule flottante, disons 135.12345678910. Je veux concaténer cette valeur à une chaîne, mais je veux seulement 135.123456789. Avec l'impression, je peux facilement le faire en faisant quelque chose comme:

print "%.9f" % numvar

avec numvar étant mon numéro d'origine. Y a-t-il un moyen facile de faire ceci?

125
pauliwago

Avec Python <3 (par exemple 2.6 [voir les commentaires] ou 2.7), il existe deux façons de le faire.

# Option one
older_method_string = "%.9f" % numvar

# Option two
newer_method_string = "{:.9f}".format(numvar)

Notez toutefois que pour Python versions supérieures à 3 (par exemple 3.2 ou 3.3), la deuxième option est préférable .

Pour plus d'informations sur l'option deux, je suggère ce lien sur le formatage de chaîne à partir de la documentation Python .

Et pour plus d’informations sur l’option 1, ce lien suffit et contient des informations sur les différents drapeaux .

Python 3.6 (publié officiellement en décembre 2016), a ajouté le littéral chaîne f, voir plus d'informations ici , qui étend la méthode str.format (utilisation d'accolades telles que f"{numvar:.9f}" résout le problème initial), c’est-à-dire

# Option 3 (versions 3.6 and higher)
newest_method_string = f"{numvar:.9f}"

résout le problème. Consultez la réponse de @ Or-Duan pour plus d'informations, mais cette méthode est rapide .

149
HAL 9001

Python 3.6 | 2017

Juste pour que ce soit clair, vous pouvez utiliser le formatage chaîne f . Cela a presque la même syntaxe que la méthode format, mais la rend un peu plus agréable.

Exemple:

print(f'{numvar:.9f}')

Plus d'informations sur la nouvelle chaîne f:

Enter image description here

43
Or Duan

Utiliser round:

>>> numvar = 135.12345678910
>>> str(round(numvar, 9))
'135.123456789'
41
shantanoo

Ce n’est pas l’impression qui effectue le formatage, c’est une propriété des chaînes, vous pouvez donc simplement utiliser

newstring = "%.9f" % numvar
7
John La Rooy

Si la précision n'est pas connue jusqu'au moment de l'exécution, cette autre option de formatage est utile:

>>> n = 9
>>> '%.*f' % (n, numvar)
'135.123456789'
6
Yu Hao

Pour régler la précision avec 9 chiffres, obtenez:

print "%.9f" % numvar

Retourne la précision avec 2 chiffres:

print "%.2f" % numvar 

Retourne la précision avec 2 chiffres et la valeur convertie float:

numvar = 4.2345
print float("%.2f" % numvar) 
2
Tejas Tank

La fonction str a un bogue. S'il vous plaît essayez ce qui suit. Vous verrez "0,196553" mais le bon résultat est "0,196554". Parce que la valeur par défaut de la fonction str est ROUND_HALF_UP.

>>> value=0.196553500000 
>>> str("%f" % value).replace(".", ",")
0
ethemsulan