• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

Excel'de Ondalık Sayılarda Çıkarma Hatası

Katılım
8 Nisan 2021
Mesajlar
9
Excel Vers. ve Dili
Office 365, Türkçe
Merhaba, ondalık sayılarda çıkarma yaparken 0,70-0,67 işleminin sonucunu yanlış verdiğini fark ettim.

A1 hücresine manuel olarak 0,70; B1 hücresine manuel olarak 0,67 yazıyorum. C1 hücresine =A-B yazıyorum. C1 hücresinin sonucu 0,0299999999999999 oluyor.

Bunun nedeni nedir ?

Yardımcı olursanız çok sevinirim.
 
Senin yazdığın:
A1 = 0,70
B1 = 0,67
C1 = A1 - B1 = 0,03 olması gerekirken 0,0299999999999999 oluyor.

Bunun nedeni, bilgisayarın 0,70 ve 0,67 gibi ondalıklı (ve on tabanlı) sayıları ikili (binary) sistemde tam olarak temsil edememesidir.

Excel’de bu tür hassasiyet sorunlarını çözmek için genelde YUVARLA fonksiyonu kullanılır:
=YUVARLA(A1-B1; 2)
 
Senin yazdığın:
A1 = 0,70
B1 = 0,67
C1 = A1 - B1 = 0,03 olması gerekirken 0,0299999999999999 oluyor.

Bunun nedeni, bilgisayarın 0,70 ve 0,67 gibi ondalıklı (ve on tabanlı) sayıları ikili (binary) sistemde tam olarak temsil edememesidir.

Excel’de bu tür hassasiyet sorunlarını çözmek için genelde YUVARLA fonksiyonu kullanılır:
=YUVARLA(A1-B1; 2)


Aynı problem 0,60-0,57 işleminde ya da 0,50-0,47 işleminde olmuyor. 0,70-0,67 işleminin diğerlerinden farkı nedir ?
 
0,5 = 1/2 → binary olarak tam temsil edilebilir.
0,25 = 1/4 → yine tam temsil edilir.
0,1 = 1/10 → tam temsil edilemez.
Aynı durum, 0,70 ve 0,67 için de geçerlidir: Bu sayılar ikili sistemde tam temsil edilemez, ama 0,60 veya 0,57 gibi bazı sayılar daha az hata ile temsil edilebilir.
******************************************
Peki Neden 0,70 - 0,67 = 0,02999999... ?
Bu sayıların ikili karşılıkları tam sayı değildir, dolayısıyla işlem sonucu "0,03" yerine yaklaşık bir sayı olur: 0,0299999999999999.
2. 0,60 ve 0,57 daha az hata içeriyor olabilir
Bu sayılar da binary sistemde yaklaşık olarak temsil edilir, ama hata miktarı o kadar küçüktür ki 0,03 sonucu tam çıkacak şekilde yuvarlanabilir.
******************************************
İşlemGerçek SonuçBilgisayarın Sonucu

0,70 - 0,67

0,0300000000000000

0,0299999999999999 ❌

0,60 - 0,57

0,0300000000000000

0,0300000000000000 ✅

0,50 - 0,47

0,0300000000000000

0,0300000000000000 ✅

Bu tür küçük farklar genellikle YUVARLA fonksiyonu ile çözülür:
=YUVARLA(A1-B1; 2) VEYA =ETOPLA(A1; -B1)

Özetle :
Sorun, sayının binary sistemde tam temsil edilememesi.
Bazı ondalık sayılar daha “uygun” olduğundan sorun çıkarmıyor.
Bu yüzden 0,70 - 0,67 ≠ 0,03 çıkıyor, ama 0,60 - 0,57 = 0,03 çıkıyor.
YUVARLA kullanmak en güvenli yoldur
 
0,5 = 1/2 → binary olarak tam temsil edilebilir.
0,25 = 1/4 → yine tam temsil edilir.
0,1 = 1/10 → tam temsil edilemez.
Aynı durum, 0,70 ve 0,67 için de geçerlidir: Bu sayılar ikili sistemde tam temsil edilemez, ama 0,60 veya 0,57 gibi bazı sayılar daha az hata ile temsil edilebilir.
******************************************
Peki Neden 0,70 - 0,67 = 0,02999999... ?
Bu sayıların ikili karşılıkları tam sayı değildir, dolayısıyla işlem sonucu "0,03" yerine yaklaşık bir sayı olur: 0,0299999999999999.
2. 0,60 ve 0,57 daha az hata içeriyor olabilir
Bu sayılar da binary sistemde yaklaşık olarak temsil edilir, ama hata miktarı o kadar küçüktür ki 0,03 sonucu tam çıkacak şekilde yuvarlanabilir.
******************************************
İşlemGerçek SonuçBilgisayarın Sonucu

0,70 - 0,67

0,0300000000000000

0,0299999999999999 ❌

0,60 - 0,57

0,0300000000000000

0,0300000000000000 ✅

0,50 - 0,47

0,0300000000000000

0,0300000000000000 ✅
Bu tür küçük farklar genellikle YUVARLA fonksiyonu ile çözülür:

=YUVARLA(A1-B1; 2) VEYA =ETOPLA(A1; -B1)

Özetle :
Sorun, sayının binary sistemde tam temsil edilememesi.
Bazı ondalık sayılar daha “uygun” olduğundan sorun çıkarmıyor.
Bu yüzden 0,70 - 0,67 ≠ 0,03 çıkıyor, ama 0,60 - 0,57 = 0,03 çıkıyor.
YUVARLA kullanmak en güvenli yoldur

Açıklamanız için teşekkürler
 
Geri
Üst