Python'da yüzde değeri nasıl yazdırılır?


184

bu benim kodum:

print str(float(1/3))+'%'

ve gösteriyor:

0.0%

ama almak istiyorum 33%

Ne yapabilirim?


11
int / int = int, int / float = şamandıra, flaot / int = şamandıra
— AbiusX 15:11

3
Yüzde yüz anlamına gelir . Basit bir oranınız varsa ( 1/3sizin durumunuzda), yüzde değeri elde etmek için çarpmak zorunda olan birim başına100 bir değeriniz vardır. Tamsayı ve şamandıra bölümü arasındaki fark için diğer yanıtlara bakın.
— Apalala

FWIW, Python 3.x'te print(str(float(1/3))+'%')yazdırılacak 0.3333333333333333%- yine de tam olarak ne istediğinizi değil, ama en azından biraz daha yakın. Bunun nedeni, bölümün bu sürümde farklı şekilde çalışmasıdır.
— martineau

Yanıtlar:


280

formatyüzde kayan nokta hassasiyeti türünü destekler :

>>> print "{0:.0%}".format(1./3)
33%

Tamsayı bölümü istemiyorsanız, Python3'ün bölümünü aşağıdakilerden alabilirsiniz __future__:

>>> from __future__ import division
>>> 1 / 3
0.3333333333333333

# The above 33% example would could now be written without the explicit
# float conversion:
>>> print "{0:.0f}%".format(1/3 * 100)
33%

# Or even shorter using the format mini language:
>>> print "{:.0%}".format(1/3)
33%

4
Mı float(1)daha çok daha pythonic 1.?
— Tobias Kienzler

@TobiasKienzler, daha pitonik olup olmadığını bilmiyorum. En azından kodu okurken karşılaştığınız bir şey. Bence Python 3 ve gerçek bölünme varsayılan olarak bu tahriş gitti.
— miku

Aslında. Guido olmalıdır 1/3 0 yuvarlama ... baştan itibaren asıl bölünme uygulamak niye acaba açık ... sonuçta
— Tobias Kienzler

1
@TobiasKienzler Muhtemelen daha önceki zamanlarda, Python C'ye günümüzden daha yakındı.
— glglgl

14
Python 2'de veya 1.0yerine kullanacağım . IMHO öncekinden daha az rahatsız edici ve ikincisi kadar ince değil. float(1)1.
— MestreLion

176

.format()Biçim yöntemi için daha uygun bir 'yüzde' biçimlendirme seçeneği vardır :

>>> '{:.1%}'.format(1/3.0)
'33.3%'

4
Bunu eski okul "%.1f"biçimlendirmesi ile yapmanın bir yolu var mı ?
— Yuji 'Tomita' Tomita

1
Biraz "daha az uygun", ama evet! Yukarıda önerildiği gibiprint("%.1f%%" % (100 * 1.0/3))

12
Bu en iyi cevaptır, çünkü 100 ile çarpmayı gerektirmez. Aksine, formatyüzdelerin nasıl yazdırılacağını zaten bildiği gerçeğinden yararlanır !
— blambert

5
Bu kabul edilen cevap olmalı. Bu, 100 ile çarpmanın anlamsız uygulama detayını ortadan kaldırmak için yerleşik yetenekleri kullanan çok daha Pythonic'tir.
— ksadowski

2
bu yüzden f-string tarzında olacakf"{1/3.0:.1%}"
— Kubas

66

Sadece eksiksizlik uğruna, kimsenin bu basit yaklaşımı önermediğini fark ettiğim için:

>>> print("%.0f%%" % (100 * 1.0/3))
33%

Detaylar:

  • %.0f"anlamına gelir 0 ondalık basamakla bir float yazdırmak , bu yüzden" %.2fbasacaktır33.33
  • %%hazır bilgi yazdırır %. Orijinalinden biraz daha temiz+'%'
  • 1.0Bunun yerine 1bölünmeyi yüzmeye zorlamakla ilgilenir, böylece artık0.0

1
not: 100.0 * 1/3 -> tamam, 100.0 * (1/3) -> 0.0 tamam değil
— mpgn

@martialdidit: Ben en neden cevabım olmadığını, bunun farkındayım değil de parantez olan 1/3. Değerlendirme talimatı kasti:100.0 * 1 / 3 => 100.0 / 3 => 0.33...
— MestreLion

Her durumda, ben gelen zorlama taşıdığınız 100için 1işler temizlemek yapmak.
— MestreLion

2
Affedersiniz, @RuggeroTurra? Bu edilir o geniş anlamda, biçimlendirme dönüştüren bir dize olarak gösterilecek bir giriş. Lütfen OP'nin Python'da dize enterpolasyonu olarak da bilinen .format()ve %biçimlendirmenin hiçbir zaman gerekli olmadığını, geçerli bir alternatif olduğunu lütfen unutmayın .
— MestreLion

% İle bir kayan dizeyi biçimlendirirsiniz. Yüzde dizesine kayan bir sayı değildir. 100 ile çarpma% ile değil elle yapılır. Ben sadece biçimlendirme kullanan tek doğru çözüm {: .0%} ile
— Ruggero Turra

38

Tamsayıları bölüyorsunuz ve kayan noktaya dönüştürüyorsunuz. Bunun yerine şamandıralara bölün.

Bonus olarak, burada açıklanan harika dize biçimlendirme yöntemlerini kullanın: http://docs.python.org/library/string.html#format-specification-mini-language

Yüzde dönüşüm ve hassasiyet belirtmek için.

>>> float(1) / float(3)
[Out] 0.33333333333333331

>>> 1.0/3.0
[Out] 0.33333333333333331

>>> '{0:.0%}'.format(1.0/3.0) # use string formatting to specify precision
[Out] '33%'

>>> '{percent:.2%}'.format(percent=1.0/3.0)
[Out] '33.33%'

Harika bir mücevher!


18

Sadece Python 3 f-string çözümü eklemek için

prob = 1.0/3.0
print(f"{prob:.0%}")

4

Sonra bunun yerine bunu yapmak istersiniz:

print str(int(1.0/3.0*100))+'%'

.0Şamandıralar ve bunları belirtir int()sonradan tekrar tamsayılar için mermi onları.


Bu 2011'den biliyorum ama ... int()yuvarlak değil. örn int(1.9) != 2. Şöyle yapılabilir yuvarlama -round(1.9,0) == 2
— sahibi

int()kesinlikle yuvarlak yapar aşağı sayı. Örneğim tam olarak ne demek istediğimi yapıyor; OP'yi istediği için rakamları kesmek.
— Morten Kristensen

Stockoverflow harika - birkaç yıl ve hala bir yanıt. Teşekkür ederim. Ancak, bütünlük uğruna, açıklığa kavuşturmak istiyorum. int()basamakları düşürür. Yuvarlanmıyor. Yuvarlama, rakamlarla bir şey yaptığını ima eder. Sonuç yine de aynıdır; bu anlamda, fikrinizi görüyorum. Ayrıca, OP basamaklarıyla ne yapmak istediğini netleştirmez 33.333 ... 33'e yuvarlar. Yorumuma yanıt verdiğiniz için teşekkür eder ve iyi günler dileriz!
— sahibi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.