Python’da sayı yuvarlama – round fonksiyonu

Python’da sayıları en yakın tamsayıya yuvarlama için birden fazla yöntem kullanabiliriz.

Python’da sayıları en yakın tamsayıya yuvarlama için birden fazla yöntem kullanabiliriz. Bu durum, kullanım amacımıza göre daha esnek olmamızı, ve haliyle daha fazla imkana sahip olmamızı sağlar. Bu makalede Python’da sayı yuvarlamak için aklımıza ilk gelen fonksiyon olan round()’u inceleyeceğiz.

Bunun yanında, math modülünden ceil() ve floor() fonksiyonlarına da kısaca değineceğiz.

Python round fonksiyonu nasıl kullanılır

Öncelikle round nedir sorusu ile başlayalım. round(sayı, basmak), istenilen ondalık sayıda (basamak), yuvarlanmış bir sayı döndürür. Yani kabaca round ondalık sayı yuvarlama için kullanılır diyebiliriz. Eğer ondalık sayı için bir argüman tanımlanmazsa – veya None – verilen sayı için en yakın tam sayıya yuvarlama yapılır.

Peki round nereye yuvarlar? Round fonksiyonu ile verilen sayıya bağlı olarak aşağıya ve yukarıya yuvarlama yaparız. Eğer yuvarlanacak sayı için iki sayı da eş uzaklıktaysa, örneğin 0.5 için, yuvarlama çift tam sayıya doğru yapılır. Örneğin round(0.5) ve round(-0.5) verilen değerleri  0‘a, round(1.5) ise 2‘ye yuvarlar. basamak için herhangi bir tam sayı verilebilir (pozitif, sıfır veya negatif). round ile döndürülen sayı eğer basamak verilmezse veya None verilirse tam sayı olur (int). Bu da demektir ki round fonksiyonu ile tam sayıya yuvarlama da yapabiliriz. Diğer durumlarda input ile aynı türdedir.

Not: round() fonksiyonu float değerleri için şaşıracağımız sonuçlar döndürebilir. Örneğin, round(2.675, 2) ifadesinin döndürdüğü sayı 2.67‘dir. Halbuki beklediğimiz sonuç 2.68‘di. Bu durum bir hatadan kaynaklanmıyor. Aksine, çoğu ondadlıklı sayının float olarak düzgün bir şekilde tanımlanamaması sebebiyle gerçekleşiyor.

10’un katlarına yuvarlama

10’un katlarına yuvarlamayı da round fonksiyonu ile yapabiliriz.

>>> print round(1123.456789, -1)
1120.0

Bu ifade, 10’un katı olan en yakın sayıya yuvarlayacaktır. 100’ün katlarına yuvarlamak istersek basamak olarak -2 veririz.

5’in katlarına yuvarlama

5’in katlarına yuvarlama biraz daha farklı. Aşağıdaki dönüşümü istiyoruz:

10 -> 10
12 -> 10
13 -> 15
14 -> 15
16 -> 15
18 -> 20

Python’da bunun için yerleşik bir fonksiyon yok ama şunları deneyebiliriz:

Python 3

def myround(x, base=5):
    return base * round(x/base)

Yukarıdaki kodun nasıl çalıştığını anlamak aslında kolay. Sayıyı 5’ile bölüyoruz ve sonucu yuvarlayıp (round(x/5)) sonra tekrar 5 ile çarpıyoruz.

Kodun genelleştirilmiş olduğuna dikkat edin. Dolayısıyla base olarak başka bir sayı da verebiliriz.

Python 2

Python 2’de, float(x) ifadesi gerekli olacaktır. Ve son sayıyı bir tamsayıya dönüştümek için int kullanırız. Çünkü, round(), Python 2’de float döndürür.

def myround(x, base=5):
    return int(base * round(float(x)/base))

Python ondalıklı sayı – virgüllü sayı yuvarlama

Python’da ondalıklı sayı yuvarlamak için, yukarıda belirttiğimiz gibi, round() kullanılırız. Bunun için round fonksiyonuna parametre olarak yuvarlamak istediğimiz sayıya ilaveten istediğimiz virgüllü sayımızın basamak sayısını da veririz:

Örneğin:

>>> round(4.7532,2)
4.75
>>> round(4.7294,2)
4.73

Ancak burada yuvarlamak istediğimiz sayının bir float türünde olması gerektiğini unutmayın. Aksi takdirde bir tür hatası alırsınız:

TypeError: type str doesn’t define __round__ method

Böyle bir hata ile karşılaştığınız durumlardan biri şu olabilir: Bir string içerisinde birden çok sayı olabilir ve bu sayıları belirli bir basamağa yuvarlayıp döndürmek isteyebilirsiniz.

Eğer bir string içerisinden sayı alıp yuvarlamak istiyorsanız, öncelikle sayıları ayrıştırıp bir array içerisine almanız gerekir. Sonrasında yuvarlama yapabilirsiniz:

numstr = """4.7532
4.7294
4.7056
4.6822857142857"""

nums = [float(x) for x in numstr.split("\n")]

Yukarıdaki kod float içeren bir array – list döndürür.

Sayıları aldıktan sonra yuvarlamaya geçebiliriz:

for num in nums:
    print round(num,2)

Bu kod, liste içerisindeki tüm sayılar üzerinde yineleme yapacak ve 2 basamakta sayıları bastıracaktır.

Python sayıyı yukarı yuvarlama

Peki sayıları en yakın tam sayıya değil de, yukarıya yuvarlamak isteseydik? Bunu round ile yaparsak her sayı için çalışmayacaktır:

round(2.3) = 2

Burada 3 sayısına ulaşmak istedik ama 2.0 elde ettik.

Bu amaca en uygun fonksiyon ceil (ceiling) fonksiyonu:

import math
print(int(math.ceil(4.2)))

Python sayıyı aşağı yuvarlama

Benzer şekilde aşağıya yuvarlamayı da her zaman round ile yapamayacağız. Neyse ki Python bunun için de floor() ve trunc() fonksiyonlarını içeriyor.

import math
math.trunc(1.5)
> 1
math.trunc(-1.5)
> -1
math.floor(1.5)
> 1
math.floor(-1.5)
> -2

Bu yazı topluluk tarafından oluşturuldu. Lisans bilgisine bakabilirsiniz. Yanlış veya eksik bilgileri düzenlemek için github üzerinden katkıda bulunabilirsiniz.

Kategoriler: Yazı, Python

Okumaya devam et!

Python’da dosyaları kapatmak ne kadar önemli?

Python’da tüm dosyaları kapatmak için Python çöp toplayıcısına güvenmek bir kodlama uygulaması olarak yeterli mi? Örneğin aşağıdakini yapmak ne kadar doğru? Dosya hiçbir zaman kapatılamadığı ve kapatılmasını engelleyen bir özel durum oluşabileceği için bu bir sorun oluşturur mu? Yoksa dosya kapsam dışına çıktığı için for döngüsü sonunda kesinlikle kapatılır mı? Bu örnekte dosyanın Python yorumlayıcısı…

Python kodunun profilini nasıl oluşturabiliriz?

Project Euler ve diğer kodlama yarışmalarında yazdığımız kodlar genellikle belirli bir süreden kısa zamanda çalışmak zorunda.

Python ile neler yapılabilir? – 7 Neden

Python, 2003 yılından bu yana TIOBE Programlama Topluluğu Endeksi’nde sürekli olarak en popüler on programlama dili arasında yer alıyor.

Yorum Gönderin

E-posta hesabınız yayımlanmayacak.

koddla
Tema Mundana by WowThemes.net.