Saya memiliki nomor floating point, katakanlah 135.12345678910
. Saya ingin menggabungkan nilai itu ke string, tetapi hanya ingin 135.123456789
. Dengan cetak, saya dapat dengan mudah melakukan ini dengan melakukan sesuatu seperti:
print "%.9f" % numvar
dengan numvar
menjadi nomor asli saya. Apakah ada cara mudah untuk melakukan ini?
python
string
floating-point
pauliwago
sumber
sumber
Jawaban:
Dengan Python <3 (mis. 2.6 [lihat komentar] atau 2.7), ada dua cara untuk melakukannya.
Tetapi perhatikan bahwa untuk versi Python di atas 3 (mis. 3.2 atau 3.3), opsi dua lebih disukai .
Untuk informasi lebih lanjut tentang opsi dua, saya sarankan tautan ini pada pemformatan string dari dokumentasi Python .
Dan untuk informasi lebih lanjut tentang opsi satu, tautan ini akan cukup dan memiliki info tentang berbagai flag .
Python 3.6 (secara resmi dirilis pada bulan Desember 2016), menambahkan
f
string literal, lihat informasi lebih lanjut di sini , yang memperluasstr.format
metode (penggunaan kurung kurawal sedemikian rupa sehinggaf"{numvar:.9f}"
memecahkan masalah asli), yaitu,memecahkan masalah. Periksa jawaban @ Or-Duan untuk info lebih lanjut, tetapi metode ini cepat .
sumber
newer_method_string = "{:.9f}".format(numvar)
- perhatikan wajib:
untuk memisahkan bidang dan format. Saya sudah menguji ini pada 2.7.5.newer_method_string = "{0:.9f}".format(numvar)
- perhatikan 0 yang diperlukan untuk field_name untuk versi yang lebih lama ini.Python 3.6
Hanya untuk membuatnya jelas, Anda dapat menggunakan pemformatan f-string . Ini memiliki sintaks yang hampir sama dengan
format
metode, tetapi membuatnya sedikit lebih bagus.Contoh:
Lebih banyak membaca tentang string f baru:
Berikut adalah diagram waktu eksekusi berbagai metode yang diuji (dari tautan terakhir di atas):
sumber
Menggunakan
round
:sumber
Ini bukan cetak yang melakukan pemformatan, Ini properti string, jadi Anda bisa menggunakannya
sumber
Jika presisi tidak diketahui hingga runtime, opsi pemformatan lain ini berguna:
sumber
.format
-metode, catatan bahwa ini juga dapat dilakukan dengan argumen bersarang suka begitu:'{:.{n}f}'.format(numvar,n=n)
.Untuk mengatur presisi dengan 9 digit, dapatkan:
Mengembalikan presisi dengan 2 digit:
Mengembalikan presisi dengan 2 digit dan mengapung nilai yang dikonversi:
sumber
The
str
fungsi memiliki bug. Silakan coba yang berikut ini. Anda akan melihat '0,196553' tetapi output yang tepat adalah '0,196554'. Karena nilaistr
default fungsi adalah ROUND_HALF_UP.sumber
.
vs,
? Dan bagaimana itu relevan untuk pertanyaan pauliwago?