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
  15gb .myd uzantılı dosya python ile okutma perry 1 1,196 27-11-2022, Saat: 17:59
Son Yorum: perry
Question Python Dili Soru & Cevap gecemor 1,493 1,075,067 08-11-2022, Saat: 11:18
Son Yorum: Antonyobanderas
  GÜNCEL Python request , c# request e göre çok yavaş ne yapabilirim perry 12 3,088 28-09-2022, Saat: 20:27
Son Yorum: krast
  YENİ Python Pyqt5 memory leak sorunu perry 3 1,378 28-09-2022, Saat: 11:33
Son Yorum: gecemor
  YENİ PYTHON ads approval CaglarDevv 2 1,509 04-07-2022, Saat: 01:23
Son Yorum: CaglarDevv

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi
Change Theme