ini kode saya:
print str(float(1/3))+'%'
dan itu menunjukkan:
0.0%
tapi aku ingin mendapatkannya 33%
Apa yang dapat saya?
python
python-2.x
zjm1126
sumber
sumber
1/3
dalam kasus Anda), Anda memiliki nilai per unit yang harus dikalikan dengan100
untuk mendapatkan nilai persen . Lihat jawaban lain untuk perbedaan antara pembagian integer dan float.print(str(float(1/3))+'%')
akan mencetak0.3333333333333333%
- masih tidak persis apa yang Anda inginkan, tetapi setidaknya itu sedikit lebih dekat. Ini karena pembagian bekerja secara berbeda dalam versi itu.Jawaban:
format
mendukung jenis presisi persentase floating point :Jika Anda tidak ingin divisi integer, Anda dapat mengimpor divisi Python3 dari
__future__
:sumber
float(1)
lebih pythonic daripada1.
?1.0
alih-alihfloat(1)
atau1.
. IMHO itu kurang menonjol dari yang pertama dan tidak sehalus yang terakhir.Ada opsi pemformatan 'persen' yang lebih nyaman untuk
.format()
metode format:sumber
"%.1f"
format sekolah lama ?print("%.1f%%" % (100 * 1.0/3))
format
sudah tahu cara mencetak persentase!f"{1/3.0:.1%}"
Hanya demi kelengkapan, karena saya perhatikan tidak ada yang menyarankan pendekatan sederhana ini:
Detail:
%.0f
kependekan dari " print float dengan 0 desimal ", begitu%.2f
juga dengan print33.33
%%
mencetak literal%
. Sedikit lebih bersih dari aslinya+'%'
1.0
bukannya1
mengurus memaksa divisi untuk mengapung, jadi tidak ada lagi0.0
sumber
1/3
. Urutan evaluasi disengaja:100.0 * 1 / 3 => 100.0 / 3 => 0.33...
100
ke1
, untuk memperjelas..format()
, dan%
-formating, juga dikenal sebagai interpolasi string dengan Python, adalah alternatif yang benar-benar valid.Anda membagi bilangan bulat lalu mengonversi menjadi float. Membagi dengan mengapung sebagai gantinya.
Sebagai bonus, gunakan metode pemformatan string yang luar biasa yang dijelaskan di sini: http://docs.python.org/library/string.html#format-specification-mini-language
Untuk menentukan konversi persen dan presisi.
Permata yang luar biasa!
sumber
Hanya untuk menambahkan solusi f-string Python 3
sumber
Maka Anda ingin melakukan ini sebagai gantinya:
Yang
.0
menunjukkan mereka sebagai mengapung danint()
membulatkannya ke bilangan bulat setelah itu lagi.sumber
int()
tidak bulat. misint(1.9) != 2
. Pembulatan dapat dilakukan seperti -round(1.9,0) == 2
int()
tentu tidak putaran bawah nomor. Teladan saya melakukan persis apa yang saya maksud; memotong angka karena itulah yang diinginkan OP.int()
menjatuhkan digit. Itu tidak bulat. Pembulatan menyiratkan itu melakukan sesuatu dengan digit. Hasil akhirnya sama saja; dalam pengertian itu, saya mengerti maksud Anda. Juga, OP tidak mengklarifikasi apa yang dia ingin lakukan dengan angka-angka yang ada 33.333 ... tidak menjadi 33. Terima kasih telah menanggapi komentar saya dan bersenang-senang!