Yazılar
The blog is currently available in Turkish only. Posts are not translated yet — the rest of the site is in English.

0.1 + 0.2 neden 0.3 etmiyor?

Konsola `0.1 + 0.2` yaz, `0.3` çıkmaz. Bu bir JavaScript hatası değil — Python'da, Java'da, Go'da da aynı sonucu alırsın. IEEE 754, mantissa ve parayı neden asla float olarak tutmaman gerektiği.

Furkan Özay15 Eylül 2026 · 2 dk okuma
0.1 + 0.2 neden 0.3 etmiyor?

Konsola 0.1 + 0.2 yaz. Çıkan sonuç 0.30000000000000004. Hatalı bir kütüphane kullanmıyorsun, tarayıcın bozuk değil — ve bu bir JavaScript hatası da değil. Python'da, Java'da, Go'da, hangi dilde denersen dene aynı sonucu alırsın. Çünkü hepsi aynı standardı kullanıyor: IEEE 754.

Taban meselesi

Onluk tabanda 1/3'ü tam yazamazsın; 0.333... sonsuza gider. Bilgisayar da benzer bir sorun yaşıyor, ama ikilik tabanda. 0.1 ikilik tabanda 0.000110011... şeklinde sonsuza kadar tekrar eden bir kesir. Onluk tabanda basit görünen bir sayı, ikilik tabanda imkânsız oluyor.

64 bitin sınırı

Bir JavaScript sayısı hafızada 64 bit yer kaplıyor: bir işaret biti, on bir üs biti, elli iki basamak (mantissa) biti. Sonsuza giden 0.1'in ikilik açılımı bu elli iki basamakta kesiliyor. Geriye ufacık, gözle görülmeyen bir yuvarlama hatası kalıyor. 0.1 ve 0.2'nin kendi hataları toplanınca 0.30000000000000004 ortaya çıkıyor.

Tek işlemde görünmez, milyonda birikir

JavaScript
console.log(0.1 + 0.2); // 0.30000000000000004
console.log(0.1 + 0.2 === 0.3); // false

Tek bir toplamada bu fark hiçbir şeyi bozmaz. Ama bir alışveriş sepetinde yüzlerce toplama, bir muhasebe sisteminde milyonlarca işlem olduğunda bu hata birikir ve bir noktada bir kuruş kaybolur. Muhasebe tutmaz, testler rastgele kızarır.

⚠️Parayı asla float tutma

Kuralı baştan koy: para birimini ondalıklı sayı olarak saklama. Kuruş (ya da sent) cinsinden tam sayı sakla, ekranda göstermeden hemen önce böl. Karşılaştırma yapman gerekiyorsa da eşitliği değil, küçük bir toleransı kontrol et: Math.abs(a - b) < Number.EPSILON.

Kapanış

Bu, mülakatlarda hâlâ sorulan bir soru — ve sebebi rastgele bir kod hatası değil, sayıların bilgisayarda nasıl temsil edildiğiyle ilgili temel bir kısıt. Parayla uğraşan her sistemde bu kuralı baştan kur, sonra unut.