Afficher un flottant avec deux décimales en Python


136

J'ai une fonction prenant des arguments flottants (généralement des entiers ou des décimales avec un chiffre significatif), et je dois sortir les valeurs dans une chaîne avec deux décimales (5 -> 5,00, 5,5 -> 5,50, etc.). Comment puis-je faire cela en Python?

Réponses:


148

Vous pouvez utiliser l'opérateur de mise en forme de chaîne pour cela:

>>> '%.2f' % 1.234
'1.23'
>>> '%.2f' % 5.0
'5.00'

Le résultat de l'opérateur est une chaîne, vous pouvez donc le stocker dans une variable, imprimer etc.


273

Étant donné que cet article pourrait être ici pendant un certain temps, soulignons également la syntaxe de python 3:

"{:.2f}".format(5)

9
Juste pour être complet, si les décimales sont variables, par exemple d=3, la syntaxe est"{:.{}f}".format(5, d)
jurajb

74

Formatage de chaîne f :

C'était nouveau dans Python 3.6 - la chaîne est placée entre guillemets comme d'habitude, précédée de f'...la même manière que vous le feriez r'...pour une chaîne brute. Ensuite, vous placez ce que vous voulez mettre dans votre chaîne, vos variables, vos nombres, entre accolades f'some string text with a {variable} or {number} within that text'- et Python évalue comme avec les méthodes de formatage de chaîne précédentes, sauf que cette méthode est beaucoup plus lisible.

>>> a = 3.141592
>>> print(f'My number is {a:.2f} - look at the nice rounding!')

My number is 3.14 - look at the nice rounding!

Vous pouvez voir dans cet exemple que nous formons avec des décimales de la même manière que les méthodes de formatage de chaîne précédentes.

NB apeut être un nombre, une variable ou même une expression par exemple f'{3*my_func(3.14):02f}'.

À l'avenir, avec le nouveau code, je préfère les f-strings aux méthodes courantes% s ou str.format () car les f-strings peuvent être beaucoup plus lisibles et sont souvent beaucoup plus rapides .


6

Formatage de chaîne:

print "%.2f" % 5

1
Mais tout cela sont des chaînes, donc je ne peux pas faire d'opérations mathématiques sur eux
itsaruns

@itsaruns L'ajout de décimales vides ne fait aucune différence si vous avez juste besoin d'effectuer des opérations mathématiques dessus. Vous cherchez peut-être math.floor, math.ceilouround
Steen Schütt

5

Utilisation du formatage de chaîne python.

>>> "%0.2f" % 3
'3.00'

4

Formatage de chaîne:

a = 6.789809823
print('%.2f' %a)

OU

print ("{0:.2f}".format(a)) 

La fonction ronde peut être utilisée:

print(round(a, 2))

La bonne chose à propos de round () est que nous pouvons stocker ce résultat dans une autre variable, puis l'utiliser à d'autres fins.

b = round(a, 2)
print(b)

5
Voter contre round. Il ne doit pas être utilisé uniquement à des fins d' affichage .
wim le

@wim Je respecte votre commentaire, mais ces réponses sont juste pour satisfaire l'exigence de quelqu'un.
debaonline4u le

2
@ debaonline4u wim a raison. round(5.0001, 2)-> 5.0, pas'5.00'
wjandrea le


3

Si vous voulez réellement changer le nombre lui-même au lieu de l'afficher différemment, utilisez format ()

Formatez-le à 2 décimales:

format(value, '.2f')

exemple:

>>> format(5.00000, '.2f')
'5.00'

0

Je sais que c'est une vieille question, mais j'avais du mal à trouver la réponse moi-même. Voici ce que j'ai trouvé:

Python 3:

>>> num_dict = {'num': 0.123, 'num2': 0.127}
>>> "{0[num]:.2f}_{0[num2]:.2f}".format(num_dict) 
0.12_0.13

3
Bonjour, bienvenue dans Stack Overflow. Lorsque vous répondez à une question qui a déjà de nombreuses réponses, assurez-vous d'ajouter des informations supplémentaires sur les raisons pour lesquelles la réponse que vous fournissez est substantielle et ne fait pas simplement écho à ce qui a déjà été vérifié par l'affiche originale. Ceci est particulièrement important dans les réponses «code uniquement» telles que celle que vous avez fournie.
chb


-1

Si vous souhaitez obtenir une valeur à virgule flottante avec deux décimales limitées au moment de l'appel de l'entrée,

Vérifiez ceci ~

a = eval(format(float(input()), '.2f'))   # if u feed 3.1415 for 'a'.
print(a)                                  # output 3.14 will be printed.

Pourquoi evalune chaîne alors que vous pourriez juste round? Quoi qu'il en soit, cela ne fonctionne même pas correctement car si vous alimentez 5, vous obtenez 5.0au lieu de ce 5.00que OP veut.
wjandrea le

Cela ne fonctionne pas non plus pour nanet inf.
wjandrea le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.