Python'da iki ondalık basamaklı bir kayan nokta göster


136

Float argümanları (genellikle bir anlamlı basamaklı tamsayı veya ondalık sayılar) alan bir işlevim var ve değerleri iki ondalık basamaklı bir dizede (5 -> 5.00, 5.5 -> 5.50, vb.) Çıkarmam gerekiyor. Bunu Python'da nasıl yapabilirim?

Yanıtlar:


148

Bunun için dize biçimlendirme operatörünü kullanabilirsiniz:

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

Operatörün sonucu bir dizedir, böylece onu bir değişken, baskı vb. İçinde saklayabilirsiniz.


273

Bu gönderi bir süre burada olabileceğinden, python 3 sözdizimine de işaret edelim:

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

9
d=3"{:.{}f}".format(5, d)
Tamlık

74

f-string biçimlendirmesi:

Bu Python 3.6'da yeniydi - dize, her zamanki gibi tırnak işaretleri arasına yerleştirilir, başına ham dizede f'...yaptığınız gibi eklenir r'.... Ardından, dizgenizin, değişkenlerinizin, sayılarınızın, küme parantezlerinizin içine koymak istediğiniz her şeyi yerleştirirsiniz f'some string text with a {variable} or {number} within that text'- ve Python, bu yöntemin çok daha okunaklı olması dışında önceki dize biçimlendirme yöntemlerinde olduğu gibi değerlendirir.

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

My number is 3.14 - look at the nice rounding!

Bu örnekte , ondalık basamaklarla biçimlendirdiğimizi görebilirsiniz. , önceki dize biçimlendirme yöntemlerine benzer şekilde biçimlendirdiğimizi görebilirsiniz.

NB foobarbir sayı, değişken veya hatta bir ifade olabilir, örn.f'{3*my_func(3.14):02f}' .

İleriye dönük olarak, yeni kodla, f-dizelerini yaygın% s veya str.format () yöntemlerine tercih ederim çünkü f-dizeleri çok daha okunabilir ve genellikle çok daha hızlıdır .


6

Dize biçimlendirme:

print "%.2f" % 5

1
Ama bunların hepsi dizge, bu yüzden üzerlerinde herhangi bir matematiksel işlem
yapamıyorum

@itsaruns Boş ondalık basamaklar eklemek, yalnızca matematiksel işlemler gerçekleştirmeniz gerekiyorsa hiçbir fark yaratmaz. math.floormath.ceilround
Arıyor

5

Python dize biçimlendirmesini kullanma.

>>> "%0.2f" % 3
'3.00'

5

Dize Biçimlendirme:

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

VEYA

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

Round Fonksiyonu kullanılabilir:

print(round(a, 2))

Round () ile ilgili iyi olan şey, bu sonucu başka bir değişkene kaydedip sonra başka amaçlar için kullanabiliriz.

b = round(a, 2)
print(b)

5
İçin olumsuz oy verin round. Sadece teşhir amaçlı kullanılmamalıdır.
wim

@wim Yorumunuza saygı duyuyorum, ancak bu cevaplar sadece birinin ihtiyacını karşılamak için.
debaonline4u

2
@ debaonline4u wim haklı. round(5.0001, 2)-> 5.0, değil'5.00'
wjandrea


3

Numarayı yalnızca farklı şekilde görüntülemek yerine gerçekten değiştirmek istiyorsanız format () kullanın

2 ondalık basamağa biçimlendirin:

format(value, '.2f')

misal:

>>> format(5.00000, '.2f')
'5.00'

0

Bunun eski bir soru olduğunu biliyorum ama cevabı kendim bulmakta zorlanıyordum. İşte bulduğum şey:

Python 3:

>>> num_dict = {'num': 0.123, 'num2': 0.127}
>>> "{0[num]:.2f}_{0[num2]:.2f}".format(num_dict) 
0.12_0.13

3
Merhaba, Stack Overflow'a hoş geldiniz. Zaten çok sayıda yanıtı olan bir soruyu yanıtlarken, lütfen verdiğiniz yanıtın neden esaslı olduğuna ve orijinal gönderen tarafından zaten incelenmiş olanı yankılamadığına dair bazı ek bilgiler eklediğinizden emin olun. Bu, sağladığınız gibi "yalnızca kod içeren" yanıtlarda özellikle önemlidir.
chb

-1

Python 3 sözdizimini kullanarak:

print('%.2f' % number)

1
% -formatting Python 3 için yeni değil ve zaten 6 yıl öncesinden bu cevabın kapsamına
giriyor

-1

Giriş çağrısı sırasında sınırlı iki ondalık basamaklı bir kayan nokta değeri elde etmek istiyorsanız,

Şuna bir bak ~

a = eval(format(float(input()), '.2f'))   # if u feed 3.1415 for 'a'.
print(a)                                  # output 3.14 will be printed.

Neden yapabiliyorken evalbir ip round? İçinde beslemek eğer bu yana Neyse bu bile düzgün çalışmıyor 5, Alacağınız 5.0yerine 5.00OP istiyor gibi.
wjandrea

Bu ayrıca nanve için çalışmaz inf.
wjandrea
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.