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