193 votes

Convertir un nombre à virgule flottante avec une certaine précision, puis le copier dans une chaîne de caractères.

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

print "%.9f" % numvar

avec numvar étant mon numéro d'origine. Existe-t-il un moyen simple de procéder ?

252voto

HAL 9001 Points 2111

Avec Python < 3 (par exemple 2.6 [voir commentaires] ou 2.7), il y a deux façons de procéder.

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

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

Mais notez que pour les versions de Python supérieures à 3 (par exemple 3.2 ou 3.3), l'option deux est préféré .

Pour plus d'informations sur la deuxième option, je vous suggère ce lien sur le formatage des chaînes de caractères de la documentation Python .

Et pour plus d'informations sur la première option, Ce lien suffit et contient des informations sur les différents drapeaux. .

Python 3.6 (officiellement publié en décembre 2016), a ajouté l'élément . f chaîne littérale, voir plus d'informations ici qui étend le str.format (utilisation d'accolades telles que f"{numvar:.9f}" résout le problème original), 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'infos, mais cette méthode est rapide .

80voto

Or Duan Points 5708

Python 3.6

Pour que ce soit clair, vous pouvez utiliser f-chaîne le formatage. La syntaxe est pratiquement la même que celle de la fonction format mais en le rendant un peu plus agréable.

Exemple :

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

Plus de lecture sur la nouvelle chaîne f :

Voici un diagramme des temps d'exécution des différentes méthodes testées (du dernier lien ci-dessus) :

execution times

62voto

shantanoo Points 614

Utilisation de round :

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

13voto

Yu Hao Points 40603

Dans le cas où la précision n'est pas connue avant l'exécution, cette autre option de formatage est utile :

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

8voto

gnibbler Points 103484

Ce n'est pas print qui fait le formatage, c'est une propriété des chaînes de caractères, donc vous pouvez simplement utiliser

newstring = "%.9f" % numvar

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X