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
Question Python Dili Soru & Cevap gecemor 1,458 801,944 07-07-2020, Saat: 09:10
Son Yorum: HackLord
  Python socket resim gönderirken EOFError hatası alıyorum SD-16 29 1,416 18-05-2020, Saat: 20:02
Son Yorum: SD-16
  Python ile yüz degistirme SD-16 1 797 01-10-2019, Saat: 11:41
Son Yorum: ahgonlum
  Python UDP ile internet paketsiz dosya indirme, Turkcell Rosenrot 2 1,096 29-08-2019, Saat: 23:09
Son Yorum: aras5757
  elimde python kodu var düzeltmek istiyorum aras5757 3 1,179 10-07-2019, Saat: 14:14
Son Yorum: aras5757

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi
Change Theme