Exibir um flutuador com duas casas decimais em Python

136

Eu tenho uma função que aceita argumentos de flutuação (geralmente números inteiros ou decimais com um dígito significativo) e preciso gerar os valores em uma string com duas casas decimais (5 -> 5,00, 5,5 -> 5,50, etc.). Como posso fazer isso em Python?

MarathonStudios
fonte

Respostas:

148

Você pode usar o operador de formatação de string para isso:

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

O resultado do operador é uma string, para que você possa armazená-lo em uma variável, imprimir etc.

NPE
fonte
273

Como este post pode estar aqui por um tempo, vamos também apontar a sintaxe do python 3:

"{:.2f}".format(5)
Daren Thomas
fonte
9
Apenas para completar, se as casas decimais é variável, por exemplo d=3, em seguida, a sintaxe é"{:.{}f}".format(5, d)
jurajb
74

formatação de string f :

Isso era novo no Python 3.6 - a string é colocada entre aspas, como de costume, precedida f'...da mesma maneira que você faria r'...para uma string bruta. Em seguida, você coloca o que deseja colocar em sua string, variáveis, números, chaves internas f'some string text with a {variable} or {number} within that text'- e o Python avalia como nos métodos anteriores de formatação de strings, exceto que esse método é muito mais legível.

>>> 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!

Você pode ver neste exemplo que formatamos com casas decimais de maneira semelhante aos métodos de formatação de string anteriores.

NB apode ser um número, variável ou mesmo uma expressão, por exemplo f'{3*my_func(3.14):02f}'.

No futuro, com o novo código, prefiro as strings f em vez dos métodos% s ou str.format () comuns, pois as strings f podem ser muito mais legíveis e geralmente muito mais rápidas .

toonarmycaptain
fonte
6

Formatação de string:

print "%.2f" % 5
bradley.ayers
fonte
1
Mas tudo isso são strings, então não iam capaz de fazer quaisquer operações matemáticas sobre eles
itsaruns
@itsaruns Adicionar casas decimais vazias não faz diferença se você apenas precisar executar operações matemáticas nelas. Você pode estar procurando math.floor, math.ceilouround
Steen Schütt 17/04
5

Usando formatação de string python.

>>> "%0.2f" % 3
'3.00'
kevpie
fonte
4

Formatação de string:

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

OU

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

A função Round pode ser usada:

print(round(a, 2))

O bom de round () é que podemos armazenar esse resultado em outra variável e usá-lo para outros fins.

b = round(a, 2)
print(b)
debaonline4u
fonte
5
Voto negativo para round. Não deve ser usado apenas para fins de exibição .
wim 21/02
@ wim Eu respeito o seu comentário, mas essas respostas são apenas para satisfazer os requisitos de alguém.
debaonline4u 23/02
2
@ debaonline4u wim está certo. round(5.0001, 2)-> 5.0, não'5.00'
wjandrea 14/06
3

Sintaxe mais curta do Python 3:

n = 5
print(f'{n:.2f}')
Dos
fonte
Já coberto por esta resposta de 2 anos antes
wjandrea 14/06
3

Se você realmente deseja alterar o próprio número, em vez de apenas exibi-lo de forma diferente, use format ()

Formate-o com 2 casas decimais:

format(value, '.2f')

exemplo:

>>> format(5.00000, '.2f')
'5.00'
Josh
fonte
0

Eu sei que é uma pergunta antiga, mas eu estava lutando para encontrar a resposta. Aqui está o que eu vim com:

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
fonte
3
Olá, bem-vindo ao Stack Overflow. Ao responder a uma pergunta que já tem muitas respostas, adicione algumas dicas adicionais sobre por que a resposta que você está fornecendo é substantiva e não simplesmente ecoando o que já foi examinado pelo pôster original. Isso é especialmente importante nas respostas "somente código", como as que você forneceu.
CHB
-1

Usando a sintaxe do Python 3:

print('%.2f' % number)
S. Roelofs
fonte
1
O% -formatting não é novo no Python 3 e já está coberto por esta resposta de 6 anos antes
wjandrea 14/06
-1

Se você deseja obter um valor de ponto flutuante com duas casas decimais limitadas no momento da chamada de entrada,

Veja isso ~

a = eval(format(float(input()), '.2f'))   # if u feed 3.1415 for 'a'.
print(a)                                  # output 3.14 will be printed.
karthik Elango
fonte
Por que evaluma corda quando você poderia apenas round? De qualquer forma isso não mesmo trabalhar corretamente, pois se você alimentar em 5, você obtém 5.0em vez de 5.00como OP quer.
wjandrea 14/06
Isso também não funciona para nane inf.
wjandrea 14/06