Python'da Sayı Yuvarlama Yöntemleri

Kerem Aydın·12 Temmuz 2026·⏱3 dk

Python'da bir sayıyı en yakın tam sayıya yuvarlamak için yerleşik round() fonksiyonunu kullanın. Zorunlu olarak yukarı veya aşağı yuvarlama yapmak istiyorsanız math modülünü içe aktarın ve ceil() ile floor() fonksiyonlarını uygulayın. Eğer sıkı aritmetik yuvarlama gerekiyorsa (örneğin, 2.5 → 3), standart kütüphanedeki Decimal sınıfını kullanın; çünkü standart round() bankacı kuralını (en yakın çift sayıya) uygular.

round() Fonksiyonu ile Temel Yuvarlama

round(number[, ndigits]) fonksiyonu, belirtilen ondalık basamak sayısına göre yuvarlanmış bir sayı döndürür. İkinci parametre atlanırsa, sonuç en yakın tam sayıya dönüştürülür.

Python 3'ün önemli bir özelliği: Ondalık kısmı tam olarak 0.5 olduğunda bankacı yuvarlaması (round half to even) kullanılır. Sayı en yakın çift değere yuvarlanır. Bu, büyük hacimli hesaplamalarda istatistiksel hatayı minimize etmek için yapılmıştır.

round(3.2)   # 3
round(3.5)   # 4 (en yakın çift)
round(2.5)   # 2 (en yakın çift)
round(4.5)   # 4
round(-2.5)  # -2

Eğer gerçekten int tipi elde etmek istiyorsanız, sonucu açıkça dönüştürün:

int(round(3.6))  # 4

Belirli sayıda ondalık basamağı korumak için ikinci argümanı iletin:

round(3.14159, 2)  # 3.14
round(1.25, 1)     # 1.2 (çünkü 2 çifttir)

"0.5 her zaman yukarı" kuralının kritik olduğu finansal hesaplamalar için round() kullanmayın. Standart davranış, raporlarda kuruş seviyesinde kayıplara veya tutarsızlıklara yol açabilir.

Zorunlu Yukarı ve Aşağı Yuvarlama

Görevin mantığı ondalık kısmı belirli bir yönde görmezden gelmeyi gerektirdiğinde, math modülündeki fonksiyonları kullanın:

  • math.floor(x) — aşağı yuvarlama (daha küçük tam sayıya).
  • math.ceil(x) — yukarı yuvarlama (daha büyük tam sayıya).

Bu fonksiyonlar negatif sayılarla çalışırken sayı ekseninde sırasıyla sola veya sağa hareket ederek öngörülebilir şekilde çalışır.

import math

math.floor(3.9)   # 3
math.floor(-3.1)  # -4 (daha küçük sayı)

math.ceil(3.1)    # 4
math.ceil(-3.9)   # -3 (daha büyük sayı)

Her iki fonksiyon da her zaman int tipi döndürür.

Decimal ile Hassas Aritmetik Yuvarlama

Klasik okul kuralının (0.5 her zaman sayının mutlak değerini artırır) gerekli olduğu durumlar için decimal modülünü kullanın. Bu modül, kayan noktalı sayıların ikili temsili sorunlarından kaçınmanıza ve stratejiyi manuel olarak belirlemenize olanak tanır.

En yaygın senaryo ROUND_HALF_UP (aritmetik yuvarlama) şeklindedir:

from decimal import Decimal, ROUND_HALF_UP

value = Decimal('2.5')
result = value.quantize(Decimal('1'), rounding=ROUND_HALF_UP)
# Sonuç: Decimal('3')

value2 = Decimal('3.5')
result2 = value2.quantize(Decimal('1'), rounding=ROUND_HALF_UP)
# Sonuç: Decimal('4')

Bu yaklaşım, para birimleri, vergiler ve yüksek hassasiyetli bilimsel verilerle çalışırken zorunludur.

Decimal nesnesi oluştururken sayıyı her zaman bir dize olarak (Decimal('2.5')) iletin, float olarak değil (Decimal(2.5)). Float iletmek, yuvarlama başlamadan önce temsil hatasını hemen ortaya çıkarabilir.

Yuvarlama Yöntemlerinin Karşılaştırılması

YöntemFonksiyon.5 Durumundaki DavranışDönen TipNe Zaman Kullanılır
Standartround()En yakın çift sayıyaint veya floatGenel mantık, istatistik
Aşağımath.floor()Her zaman aşağıintSayfa, paket hesaplamaları
Yukarımath.ceil()Her zaman yukarıintKargo maliyeti, stok hesaplamaları
AritmetikDecimalHer zaman yukarı (ayara göre)DecimalFinans, muhasebe

Sık Yapılan Hatalar

  1. round() fonksiyonundan matematiksel kural beklemek. Programcılar genellikle round(2.5) işleminin 2 sonucunu vermesine şaşırırlar. Bankacı kuralını unutmayın.
  2. Kayan noktalı sayılarla doğrudan çalışmak. round(2.675, 2) ifadesi, 2.675 sayısının bilgisayar belleğinde 2.674999... olarak saklanması nedeniyle 2.68 yerine 2.67 döndürebilir. Çözüm — Decimal kullanmaktır.
  3. Negatif sayılarla ilgili kafa karışıklığı. math.floor(-3.1) işlemi -3 değil, -4 döndürür; çünkü -4, -3.1'den daha küçüktür.

SSS

Bir sayıyı onluklara veya yüzlüklere nasıl yuvarlarım? round() fonksiyonunun ikinci argümanında negatif bir değer kullanın: round(1234, -2) işlemi 1200 döndürür (yüzlüklere yuvarlama). round(1234, -1) işlemi 1230 döndürür (onluklara yuvarlama).

Neden int(3.9) işlemi 4 değil de 3 verir? int() fonksiyonu yuvarlama yapmaz, ondalık kısmı kesip atar (pozitif sayılar için floor gibi çalışır). Yuvarlama için round() veya math.ceil() kullanın.

NumPy'de bir sayı dizisini nasıl yuvarlarım? NumPy kütüphanesi vektörleştirilmiş işlemleri destekler: np.round(array), np.floor(array), np.ceil(array). Bunlar yerleşik fonksiyonlara benzer şekilde çalışır ancak tüm diziye aynı anda uygulanır.