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?

MarathonStudios
la source

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.

NPE
la source
273

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

"{:.2f}".format(5)
Daren Thomas
la source
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 .

toonarmycaptain
la source
6

Formatage de chaîne:

print "%.2f" % 5
bradley.ayers
la source
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'
kevpie
la source
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)
debaonline4u
la source
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

Syntaxe Python 3 la plus courte:

n = 5
print(f'{n:.2f}')
Dos
la source
Déjà couvert par cette réponse de 2 ans plus tôt
wjandrea
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'
Josh
la source
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
Vasiliy Triandafilidi
la source
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

Utilisation de la syntaxe Python 3:

print('%.2f' % number)
S. Roelofs
la source
1
% -formatting n'est pas nouveau dans Python 3, et est déjà couvert par cette réponse de 6 ans plus tôt
wjandrea
-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.
karthik Elango
la source
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