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?

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.


273

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

"{:.2f}".format(5)

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 .


6

Pemformatan string:

print "%.2f" % 5

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'

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)

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

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'

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

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)

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.

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.