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
  Python yardım lütfen vural2123 2 59 15-09-2021, Saat: 17:36
Son Yorum: vural2123
  YENİ Python veri çekme webscapring hakkında iLLeGaLTeam1 0 837 30-05-2021, Saat: 12:59
Son Yorum: iLLeGaLTeam1
  Python kodlarımızı exe haline dönüştürme arussa 1 893 26-05-2021, Saat: 20:35
Son Yorum: gecemor
Question Python Dili Soru & Cevap gecemor 1,470 856,265 04-05-2021, Saat: 17:36
Son Yorum: Antonyobanderas
  JS fonksiyonunu Python'a çevirme morty 8 1,788 04-03-2021, Saat: 13:06
Son Yorum: morty

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi
Change Theme