Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
python float sayılarla (para) çalışmak
#1
Merhaba, herkese iyi günler. Bir kaç yerde de rastlamıştım. Float sayıları round yapmak gerekiyordu. 

Float sayılara çalışırken neden round ile yuvarlama yapmak gerekir? Bilgisayar binary (ikilik sistem) ile işlem yaptığı için mi böyle sonuç veriyor?


Kod:
>>> float(40.05)*100

4004.9999999999995

>>> int(round(float(40.05)*100,2))

4005


aşağıdaki kodda 100 ile çarptığım float sayıları para gösterimine çeviriyor. Bunun toFloat() basit hali var mıdır? Biraz spagetti oldu.

%.2f ile denedim ama bu seferde kuruşlarda hata çıkıyor. toFloat fonksiyonu şuan işimi görüyor ama basit ve okunaklı yazılabilir mi? 


Kod:
1 -> 0.01
100 -> 1.00
111 -> 1.11
101 -> 1.01
10000 -> 100.00
10001 -> 100.01

...
gibi

fiyatları 100 ile çarpmanın sebebi iki fiyat arasında range ile  1 lira(100) veya 1.05 (105) artırım yapmak istediğimden. sonra eski haline çeviriyorum. 


PHP Kod:
def toFloat(price):
    
price=str(int(price/100))+"."+str(price%100) if int(price%100)>=10 else str(int(price/100))+'.0'+str(price%100)
    print(
price)
    return(
'%.2f' float(price)) 
python ve javascript dünyada en çok yazılan iki dil.
c kadar hızlı python kadar syntaxı kolay olan julia da geleceğin dilleri arasında..
Ara
Cevapla
#2
round olsun %.2f olsun hepsi ondalıklı sayı 5 ten yukarı ise bunu 10 a çeviriyor, yani

>>> "%.1f" % 1.45
'1.4'
>>> "%.1f" % 1.46
'1.5'
>>>


böyle yaptığı için sanırım hesaplama hatası alıyorsun, bunun binary sistemiyle alakalı olup olmadığını bilmiyorum ama normal hayatta mesela muhasebe işlemlerinde 1.46 ise bu 1.5 e yuvarlanır hesap kolaylığı açısından. Ama muhasebe işlemlerinde ilk olarak yuvarlamadan (round yapmadan) olduğu gibi hesaplama yapılır en son verilecek sonuç yuvarlanır. Ne hesaplatıyosun bilmiyorum ama belki de bu şekilde yapmalısın veya hiç round yapmamalısın?
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
#3
50 lira ve 100 lira arasında 1 lira farklar ile range verip for ile bir liste [50.00,51.00...,100.00] gibi oluşturuyorum. Floatlı sayılarda range veremediğimiz için bende 100 ile çarpıp yapmıştım. Bankacılık işlemleri de nokta virgül kabul etmiyor 1 lirayı 100 olarak giriyoruz. Ben "%.1f" , "%.2f" i daha çok virgülden sonraki basamak sayılarını sınırlıyor zannediyordum yuvarlama da yapıyormuş. Teşekkürler. 
python ve javascript dünyada en çok yazılan iki dil.
c kadar hızlı python kadar syntaxı kolay olan julia da geleceğin dilleri arasında..
Ara
Cevapla

{lang: 'en'}


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  JS fonksiyonunu Python'a çevirme morty 8 205 04-03-2021, Saat: 13:06
Son Yorum: morty
  YENİ Python Kodları Apk Çevirip Çalıştıma seferkalkan 2 421 08-01-2021, Saat: 01:33
Son Yorum: seferkalkan
Question Python Dili Soru & Cevap gecemor 1,460 825,569 07-12-2020, Saat: 01:26
Son Yorum: gecemor
  Python ile harf çeviren fonksiyon. oktay811 7 484 06-11-2020, Saat: 16:07
Son Yorum: gecemor
  Python socket resim gönderirken EOFError hatası alıyorum SD-16 29 2,162 18-05-2020, Saat: 20:02
Son Yorum: SD-16

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi
Change Theme