Eu quero exibir:
49
Como 49.00
e:
54.9
Como 54.90
Independentemente do comprimento do decimal ou se existem casas decimais, eu gostaria de exibir um Decimal
com 2 casas decimais e gostaria de fazê-lo de maneira eficiente. O objetivo é exibir valores monetários.
por exemplo, 4898489.00
python
string-formatting
orokusaki
fonte
fonte
Respostas:
Suponho que você provavelmente esteja usando os
Decimal()
objetos dodecimal
módulo? (Se você precisar exatamente de dois dígitos de precisão além do ponto decimal com números arbitrariamente grandes, você definitivamente deveria ser, e é isso que o título da sua pergunta sugere ...)Nesse caso, a seção Perguntas frequentes decimais dos documentos possui um par de perguntas / respostas que pode ser útil para você:
A próxima pergunta é:
Se você precisar de uma resposta para isso (junto com muitas outras informações úteis), consulte a seção acima mencionada dos documentos . Além disso, se você mantiver seus
Decimal
s com dois dígitos de precisão além do ponto decimal (significando a precisão necessária para manter todos os dígitos à esquerda do ponto decimal e dois à direita dele e não mais ...), convertê-los em strings comstr
funcionará bem:fonte
Você deve usar as novas especificações de formato para definir como seu valor deve ser representado:
A documentação pode ser um pouco obtusa às vezes, por isso recomendo as seguintes referências legíveis e mais fáceis:
.format()
formatação de string de estilo%
formatação de string no estilo antigo com a.format()
formatação de string no estilo novoO Python 3.6 introduziu a interpolação literal de strings (também conhecida como strings-f), agora você pode escrever o texto acima ainda mais sucinto como:
fonte
format
retorna umstr
, não umfloat
:print type({0:.2f}".format(pi))
retorna<type 'str'>
.return
. Mude mentalmente isso paraprint
s."{:.2f}".format(pi)
0:
faz? Presumo que o.
faz parte da cadeia de caracteres pythonA seção Operações de formatação de string da documentação do Python contém a resposta que você está procurando. Em resumo:
Alguns exemplos:
fonte
0
depois do%
, e não há necessidade de envolvernum
umtuple
.r = 1; "%s" % r; r = (1, 2); "%s" % r
versusr = 1; "%s" % (r,); r = (1,2 ); "%s" % (r,)
. Como tal, os estilos de codificação mais sofisticados do python usam a tupla incondicional agora (e o Python 3 reprovou todo o método de formatação de strings como propenso a erros).Você pode usar o operador de formatação de string da seguinte maneira:
Não sei ao certo o que você quer dizer com "eficiente" - esse certamente não é o gargalo do seu aplicativo. Se o seu programa estiver sendo executado lentamente, analise-o primeiro para encontrar os pontos de acesso e depois otimize-os.
fonte
Você pode mudar
2
em2f
qualquer número de casas decimais que você deseja mostrar.EDITAR:
De
Python3.6
, isso se traduz em:fonte
.format é uma maneira mais legível de lidar com formatação variável:
fonte
No python 3, uma maneira de fazer isso seria
fonte
se você tiver vários parâmetros, poderá usar
fonte
Se você estiver usando isso para moeda, e também quiser que o valor seja separado por
,
você, use$ {:,.f2}.format(currency_value)
.por exemplo:
currency_value = 1234.50
$ {:,.f2}.format(currency_value)
-->
$ 1,234.50
Aqui está um pouco do código que escrevi há algum tempo:
print("> At the end of year " + year_string + " total paid is \t$ {:,.2f}".format(total_paid))
fonte
O exemplo da maneira mais fácil de mostrar como fazer isso é:
Código:
>>> points = 19.5
>>> total = 22
>>>'Correct answers: {:.2%}'.format(points/total)
`Saída: Respostas corretas: 88,64%
fonte
A respeito
fonte