Tampilkan float dengan dua tempat desimal di Python

136

Saya memiliki fungsi mengambil argumen float (umumnya bilangan bulat atau desimal dengan satu digit signifikan), dan saya perlu menampilkan nilai dalam string dengan dua tempat desimal (5 -> 5,00, 5,5 -> 5,50, dll). Bagaimana saya bisa melakukan ini dengan Python?

MarathonStudios
sumber

Jawaban:

148

Anda dapat menggunakan operator pemformatan string untuk itu:

>>> '%.2f' % 1.234
'1.23'
>>> '%.2f' % 5.0
'5.00'

Hasil dari operator adalah string, sehingga Anda dapat menyimpannya dalam variabel, cetak dll.

NPE
sumber
273

Karena posting ini mungkin ada di sini untuk sementara waktu, mari kita tunjukkan juga sintaks python 3:

"{:.2f}".format(5)
Daren Thomas
sumber
9
Hanya untuk kelengkapan, jika desimalnya variabel, misal d=3, maka sintaksnya adalah"{:.{}f}".format(5, d)
jurajb
74

pemformatan f-string :

Ini baru dalam Python 3.6 - string ditempatkan dalam tanda kutip seperti biasa, diawali dengan f'...cara yang sama Anda lakukan r'...untuk string mentah. Kemudian Anda meletakkan apa pun yang ingin Anda masukkan ke dalam string, variabel, angka, di dalam kurung kurawal f'some string text with a {variable} or {number} within that text'- dan Python mengevaluasi seperti dengan metode pemformatan string sebelumnya, kecuali bahwa metode ini jauh lebih mudah dibaca.

>>> a = 3.141592
>>> print(f'My number is {a:.2f} - look at the nice rounding!')

My number is 3.14 - look at the nice rounding!

Anda dapat melihat dalam contoh ini kami memformat dengan tempat desimal dengan cara yang mirip dengan metode pemformatan string sebelumnya.

NB adapat berupa angka, variabel, atau bahkan ekspresi misalnya f'{3*my_func(3.14):02f}'.

Ke depan, dengan kode baru saya lebih suka metode f-string daripada metode% s atau str.format () yang umum karena f-string bisa jauh lebih mudah dibaca, dan seringkali jauh lebih cepat .

toonarmycaptain
sumber
6

Pemformatan string:

print "%.2f" % 5
bradley.ayers
sumber
1
Tetapi semua ini adalah string, jadi saya tidak dapat melakukan operasi matematika pada mereka
itsaruns
@itsaruns Menambahkan tempat desimal kosong tidak ada bedanya jika Anda hanya perlu melakukan operasi matematika pada mereka. Anda mungkin mencari math.floor, math.ceilatauround
Steen Schütt
5

Menggunakan format string python.

>>> "%0.2f" % 3
'3.00'
kevpie
sumber
4

Pemformatan Tali:

a = 6.789809823
print('%.2f' %a)

ATAU

print ("{0:.2f}".format(a)) 

Fungsi Bulat dapat digunakan:

print(round(a, 2))

Untung tentang round () adalah bahwa, kita dapat menyimpan hasil ini ke variabel lain, dan kemudian menggunakannya untuk tujuan lain.

b = round(a, 2)
print(b)
debaonline4u
sumber
5
Downvote untuk round. Seharusnya tidak digunakan hanya untuk tujuan tampilan .
wim
@wim Saya menghargai komentar Anda, tetapi jawaban ini hanya untuk memenuhi kebutuhan seseorang.
debaonline4u
2
@ debaonline4u wim benar. round(5.0001, 2)-> 5.0, tidak'5.00'
wjandrea
3

Sintaks Python 3 terpendek:

n = 5
print(f'{n:.2f}')
Dos
sumber
Sudah dicakup oleh jawaban ini dari 2 tahun sebelumnya
wjandrea
3

Jika Anda benar-benar ingin mengubah nomor itu sendiri, bukan hanya menampilkannya secara berbeda, gunakan format ()

Format ke 2 tempat desimal:

format(value, '.2f')

contoh:

>>> format(5.00000, '.2f')
'5.00'
Josh
sumber
0

Saya tahu ini adalah pertanyaan lama, tetapi saya sendiri kesulitan menemukan jawabannya. Inilah yang saya pikirkan:

Python 3:

>>> num_dict = {'num': 0.123, 'num2': 0.127}
>>> "{0[num]:.2f}_{0[num2]:.2f}".format(num_dict) 
0.12_0.13
Vasiliy Triandafilidi
sumber
3
Hai, selamat datang di Stack Overflow. Saat menjawab pertanyaan yang sudah memiliki banyak jawaban, pastikan untuk menambahkan beberapa wawasan tambahan mengapa jawaban yang Anda berikan bersifat substantif dan tidak hanya menggemakan apa yang sudah diperiksa oleh poster asli. Ini sangat penting dalam jawaban "hanya kode" seperti yang Anda berikan.
chb
-1

Menggunakan sintaks Python 3:

print('%.2f' % number)
S. Roelofs
sumber
1
% -formating bukan hal baru untuk Python 3, dan sudah dicakup oleh jawaban ini dari 6 tahun sebelumnya
wjandrea
-1

Jika Anda ingin mendapatkan nilai floating point dengan dua tempat desimal terbatas pada saat input panggilan,

Lihat ini ~

a = eval(format(float(input()), '.2f'))   # if u feed 3.1415 for 'a'.
print(a)                                  # output 3.14 will be printed.
karthik Elango
sumber
Kenapa evalharus tali kalau bisa saja round? Pokoknya ini bahkan tidak berfungsi dengan baik karena jika Anda memberi makan 5, Anda mendapatkan 5.0bukan 5.00seperti yang diinginkan OP.
wjandrea
Ini juga tidak berfungsi untuk nandan inf.
wjandrea