
Para ve Tutar Saklamak: Ondalık Hatası Nasıl Önlenir?
Sepette üç ürün var, toplam 29,99 lira görünüyor ama ödeme sayfasında 29,98 yazıyor. Kimse bir şey değiştirmedi. Bu bir kuruşluk fark, ondalık sayıların nasıl saklandığıyla ilgilidir ve muhasebe uyuşmazlığına dönüşür.
Bu yazı, parasal tutarların doğru saklanmasını ele alıyor.
Sorunun Kaynağı
Kayan noktalı sayılar ikilik tabanda saklanır:
- Ondalık değer ikiliğe çevrilir.
- Bazı değerler tam karşılık bulmaz.
- En yakın değere yuvarlanır.
İkinci adım tüm sorunu doğurur ve sezgiye aykırıdır: onluk tabanda basit görünen 0,1 gibi bir sayının ikilik tabanda tam karşılığı yoktur — bilgisayar onu en yakın değerle saklar ve bu küçük fark toplamalarda birikir.
Tek bir işlemde fark görünmez.
Ama yüzlerce satırın toplandığı bir faturada kuruş kayması ortaya çıkar.
Bu, kodunuzdaki bir hata değil, sayı türünün doğasıdır.
İki Doğru Yaklaşım
| Yöntem | Uygunluk |
|---|---|
| Kuruş cinsinden tam sayı | Çok iyi |
| Sabit ondalıklı sayı türü | Çok iyi |
| Kayan noktalı sayı | Kullanılmamalı |
| Metin olarak saklamak | Hesaplanamaz |
Birinci satır en basit ve en güvenli yöntemdir: tutarı liradan değil kuruştan saklamak, ondalık sorununu tamamen ortadan kaldırır — 29,99 lira veritabanında 2999 olarak durur ve tüm işlemler tam sayı aritmetiğiyle yapılır.
Görüntüleme anında yüze bölünüp biçimlendirilir.
İkinci satır ise veritabanının sunduğu sabit ondalıklı türdür ve okunabilirlik avantajı sağlar.
Her iki yöntem de doğrudur; ekipçe biri seçilip tutarlı uygulanmalıdır.
Yuvarlama Kuralı
- Ne zaman yuvarlanacağı belirlenmeli.
- Hangi yöne yuvarlanacağı belirlenmeli.
- Kural her yerde aynı olmalı.
Birinci madde en çok hataya yol açan noktadır: her ara işlemde yuvarlamak ile yalnızca son adımda yuvarlamak farklı sonuçlar üretir — vergi hesabında bu fark, fatura toplamı ile satır toplamlarının tutmamasına yol açar.
Muhasebe genellikle satır bazında yuvarlamayı bekler.
Üçüncü madde ise sistem genelinde tutarlılık gerektirir.
Ödeme sağlayıcısı farklı yuvarlıyorsa uyuşmazlık kaçınılmazdır.
Vergi ve İndirim
- Birim fiyat belirlenir.
- İndirim uygulanır.
- Vergi eklenir.
- Sıra sonucu değiştirir.
Dördüncü madde çoğu kişinin fark etmediği bir gerçeği söyler: indirimi vergiden önce mi sonra mı uygulayacağınız yalnızca bir tercih değil, farklı toplamlar üreten bir karardır — ve bu karar mevzuata göre belirlenmelidir.
Yüzde indirimlerde kuruş farkları kaçınılmazdır.
Bu farkların nereye yazılacağı önceden kararlaştırılmalıdır.
Belgelenmemiş bir yuvarlama kuralı, sonradan tartışma üretir.
Bölünemeyen Kuruş
| Durum | Çözüm |
|---|---|
| 100 kuruş 3 kişiye bölünecek | 33 + 33 + 34 |
| Artan kuruş kaybolursa | Toplam tutmaz |
| Artan sonuncuya eklenir | Toplam korunur |
İkinci satır sessiz bir hata üretir: bir tutarı eşit paylara bölerken artan kuruşları atmak, parçaların toplamının bütünden küçük olmasına yol açar — kargo dağıtımı veya taksitlendirmede bu fark doğrudan zarardır.
Üçüncü satır standart çözümdür ve artan kuruşlar bir veya birkaç parçaya dağıtılır.
Hangi parçaya ekleneceği tutarlı olmalıdır.
Taksit hesaplarında genellikle ilk veya son taksite eklenir.
Para Birimi
- Tutar tek başına anlamsızdır.
- Para birimi ayrı saklanmalıdır.
- Kur, işlem anında sabitlenmelidir.
Üçüncü madde çok sık atlanır ve ciddi sonuç doğurur: geçmiş bir siparişin tutarını bugünkü kurla göstermek, müşterinin ödediği rakamdan farklı bir sonuç verir — işlem anındaki kur, siparişle birlikte saklanmalıdır.
İade hesaplarında bu kayıt zorunludur.
İkinci madde ise çok para birimli sistemlerde temel kuraldır.
Ayrıca her para biriminin ondalık basamak sayısı aynı değildir.
Görüntüleme
- Saklama biçimi ile gösterim ayrılmalı.
- Yerel ayrım işaretleri kullanılmalı.
- Girdi de aynı biçimi kabul etmeli.
Üçüncü madde çok yaşanan bir kullanıcı hatasını önler: kullanıcı virgülle ondalık yazarken sistem noktayla bekliyorsa, girilen 1,5 değeri 15 olarak yorumlanabilir — form doğrulaması her iki ayracı da kabul etmelidir.
Binlik ayracı da temizlenmelidir.
İkinci madde ise ülkelere göre değişen gösterimleri karşılar.
Saklanan değer her zaman aynı kalır, yalnızca gösterim değişir.
Değişiklik İzi
- Tutar değişiklikleri kaydedilmeli.
- Kim, ne zaman, neden.
- Üzerine yazmak yerine ekleyin.
Üçüncü madde muhasebe açısından temel bir ilkedir: bir siparişin tutarını doğrudan güncellemek eski değeri yok eder — düzeltmeyi yeni bir kayıt olarak eklemek, hem geçmişi korur hem de denetimde ne olduğunu açıklar.
Bu yaklaşım hata bulmayı da kolaylaştırır.
İkinci madde ise uyuşmazlık durumunda tek kanıttır.
Tutar alanı, sessizce değişmemesi gereken bir alandır.
Muhasebe verisi tutan sitelerde düzenli yedek ve güvenilir veritabanı erişimi gerekir; web barındırma hizmetleri ile yedekleme ve veritabanı yönetimini tek panelden yürütebilirsiniz.
Sonuç
Kuruş farklarının nedeni kod hatası değildir: onluk tabanda basit görünen sayıların ikilik tabanda tam karşılığı yoktur ve bu fark toplamalarda birikir. Çözüm basittir — tutarı kuruştan saklamak ondalık sorununu tamamen ortadan kaldırır. Yuvarlama kuralını belirleyin, artan kuruşları dağıtın, para birimini ve işlem anındaki kuru tutarla birlikte kaydedin.
Sıkça Sorulan Sorular (SSS)
Toplamlarda neden bir kuruş fark çıkıyor?
Kayan noktalı sayılar ikilik tabanda saklanır ve 0,1 gibi değerlerin tam karşılığı yoktur; bilgisayar en yakın değeri saklar. Tek işlemde görünmeyen bu fark, yüzlerce satırın toplandığı bir faturada kuruş kaymasına dönüşür. Bu, kodunuzdaki bir hata değildir.
Tutarları nasıl saklamalıyım?
Kuruş cinsinden tam sayı olarak veya veritabanının sabit ondalıklı sayı türüyle. 29,99 lira veritabanında 2999 olarak durur ve tüm işlemler tam sayı aritmetiğiyle yapılır; görüntüleme anında yüze bölünür. Kayan noktalı sayı kullanmayın.
Bir tutarı eşit bölünce toplam tutmuyor?
Artan kuruşları atıyorsunuz. 100 kuruşu üç kişiye bölerken 33+33+33 toplamı 99 eder. Standart çözüm artanı bir parçaya eklemektir: 33+33+34. Taksitlendirmede genellikle ilk veya son taksite eklenir ve bu kural tutarlı uygulanır.
Döviz kurunu neden saklamalıyım?
Geçmiş bir siparişin tutarını bugünkü kurla göstermek, müşterinin ödediği rakamdan farklı bir sonuç verir. İşlem anındaki kur siparişle birlikte saklanmalıdır; iade hesaplarında bu kayıt zorunludur.