este é o meu código:
print str(float(1/3))+'%'
e isso mostra:
0.0%
mas eu quero pegar 33%
O que eu posso fazer?
python
python-2.x
zjm1126
fonte
fonte
1/3
no seu caso), possui um valor por unidade que deve ser multiplicado100
para obter um valor percentual . Veja as outras respostas para a diferença entre a divisão inteira e a flutuação.print(str(float(1/3))+'%')
será impresso0.3333333333333333%
- ainda não exatamente o que você deseja, mas pelo menos está um pouco mais perto. Isso ocorre porque a divisão funciona de maneira diferente nessa versão.Respostas:
format
suporta um tipo de precisão de ponto flutuante de porcentagem :Se você não deseja uma divisão inteira, pode importar a divisão do Python3 de
__future__
:fonte
float(1)
realmente mais pitônico do que1.
?1.0
vez defloat(1)
ou1.
. IMHO é menos intrusivo que o anterior e não tão sutil quanto o último.Existe uma opção de formatação 'percentual' muito mais conveniente para o
.format()
método de formato:fonte
"%.1f"
formatação da velha escola ?print("%.1f%%" % (100 * 1.0/3))
format
já sabe imprimir porcentagens!f"{1/3.0:.1%}"
Apenas por uma questão de integridade, já que notei que ninguém sugeriu essa abordagem simples:
Detalhes:
%.0f
significa " imprimir uma bóia com 0 casas decimais ", então%.2f
imprimiria33.33
%%
imprime um literal%
. Um pouco mais limpo que o original+'%'
1.0
em vez de1
cuidar de obrigar a divisão a flutuar, então não mais0.0
fonte
1/3
. A ordem de avaliação é intencional:100.0 * 1 / 3 => 100.0 / 3 => 0.33...
100
para o outro1
, para deixar as coisas claras..format()
, e%
-formatting, também conhecida como interpolação de strings no Python, é uma alternativa perfeitamente válida.Você está dividindo números inteiros e convertendo em flutuante. Divida por carros alegóricos.
Como bônus, use os incríveis métodos de formatação de string descritos aqui: http://docs.python.org/library/string.html#format-specification-mini-language
Para especificar uma porcentagem de conversão e precisão.
Uma ótima jóia!
fonte
Apenas para adicionar a solução de string f Python 3
fonte
Em seguida, você deseja fazer isso:
Ele os
.0
denota como flutuadores e osint()
arredonda para números inteiros depois novamente.fonte
int()
não arredonda. por exemploint(1.9) != 2
. O arredondamento pode ser feito dessa maneira -round(1.9,0) == 2
int()
certamente não volta para baixo o número. Meu exemplo faz exatamente o que eu pretendia fazer; cortando os dígitos, já que era isso que o OP queria.int()
derruba os dígitos. Não arredonda para baixo. O arredondamento implica que ele faz algo com os dígitos. O resultado final é o mesmo; nesse sentido, entendo o seu ponto. Além disso, o OP não esclarece o que ele / ela quer fazer com os dígitos tem 33.333 ... faz o arredondamento para 33. Obrigado por responder ao meu comentário e tenha um ótimo dia!