Virgülden (noktadan) sonraki basamak sayısını format ile kontrol etmek

Basit bir hesaplama aracı yaptım denemek için çıktı float olacağı için .'dan sonra 2 hane gelmesini istiyorum ama sonuç çok alakasız çıkıyor (1.8e+02) şeklinde. baktım baktım çözemedim. teşekkürler

matrah=input('matrah giriniz: ')

kdv=input('kdv oranını giriniz: ')

toplamTutar= (float(matrah))+(float(matrah)*(float(kdv)/100))

print('Kdv\'li toplam tutar: {:1.2}'.format(toplamTutar))

{:1.2} yerine {:.2f} yazmayı dener misin?

2 Beğeni

Matrah ve kdv olarak ne girdigini bilmedigimiz icin 1800 sonucunun neden alakasiz olabilecegi hakkinda en ufak bir fikrimiz yok.

Kullanicidan input alan kod yerine kullanicidan aldigin inputu, bi de bekledigin sonucu yazarsan yardim edebiliriz ancak.

evet bunu denedim ve işe yaradı ama {:1.2} bu neden çalışmadı? çalışmaması için bir sebep yok gibi gözüküyor.

matrah giriniz: 180.755
kdv oranını giriniz: 18
Kdv'li toplam tutar: 2.1e+02

mesela sonucu böyle veriyor normalde çıkması gereken : 213.29

Şurada bunun yanıtını bulabilirsiniz zannediyorum. Formatı belirleyen kısım şu gramere göre anlamlandırılıyor diyor:

[[fill]align][sign][#][0][width][grouping_option][.precision][type]

Formatı belirleyen, yani iki noktadan sonra gelen sizdeki 1.2’yi buna göre çözümlediğinizde 1 birimlik fill ve 2’lik bir precision istediğinizi söylüyorsunuz. Diğer alanlar varsayılan değerlerinde kalıyor. Bunlar arasında bizim için önemli olan en sondaki type alanının g varsayılan değerini aldığını görüyoruz küsuratlı sayılar için; aynı linkte biraz aşağılarda açıklaması var, siz ona oradan bakarsınız, ben diğer ikisini açıklamaya çalışayım :ğ

  • 1 birimlik fill: Bu toplam 1 birimlik alan oluşturup sayıyı oraya tıkmayı söylüyor. Gelin görün ki sizdeki sayının temsili halihazırda 1 karakterden fazla gerektiriyor, dolayısıyla bu aslında bir işe yaramıyor. Ama bunu 88 yaparsanız mesela, etkisini görürsünüz :d

  • 2’lik precision: type’ın g olması hasebiyle bu eleman virgülün arkasında ve önünde toplam kaç basamak olacağını dikte ediyor (“significant figures” yani). Peki 180 sayısını böyle nasıl temsil edersiniz? g kullandığınız için (linkten de bakmışsınızdır :d) bunu yapabilmesi için "bilimsel gösterim"e başvuruyor ve 180’in 1’ini virgülün soluna 8’ini de virgülün sağına atarak 2’lik precision’ı sağlıyor. Tabii sayı 1.8 oldu, x100’ü de bilimsel gösterimin e02’si temsil ediyor; 1.8e+02 çıktısını alıyoruz (+ da - olmadığını söylemek için orada :d).

Başka bir yanıtta çözüm olarak gösterilen .2f’in ne demek istediğini de yukarıdaki kuraldan ve linkten anlayabiliriz.

(bu arada olur da yetkili ve ilgili birisi burayı görürse konunun başlığını düzenlemelerini rica ederim. bi’ ara ben de düzenleyebiliyordum ama görevi kötüye mi kullandım nedir artık olmuyor :ğ)

4 Beğeni