📰 İçerik
C# ile Para Birimlerini Yazıya Çevirmek
Birçok uygulamada (fatura, sözleşme, dekont vb.) sayısal para birimlerinin yazıyla da gösterilmesi gerekir. Bu yazıda, C# dilinde yazılmış decimal türündeki bir para miktarını Türk Lirası formatında yazıya çeviren gelişmiş bir metodu paylaşıyoruz.
🎯 Amacımız
Bu kod:
decimal veri türündeki bir tutarı (örneğin 1000000.00),
Hem tam kısmını (1.000.000) hem de kuruş kısmını (0.50 gibi) ayrıştırarak,
Doğru dil yapısına uygun şekilde (örneğin: “Bir Milyon Türk Lirası Elli Kuruş”) yazıya çevirir.
🧠 Algoritmanın Temel Mantığı
Tutarı Ayırma
Tam sayı kısmı ve kuruş kısmı ayrı ayrı ele alınır.
3 Basamaklı Gruplama
Sayılar sağdan 3’erli gruplara ayrılarak “bin”, “milyon”, “milyar” gibi eklerle ilişkilendirilir.
Dil Kurallarına Dikkat
“bir bin” yerine “bin” denir.
Sıfır kuruş varsa yazılmaz.
Her bölümün arası doğru boşluklarla ayrılır.
🧪 Örnek Kullanım
decimal paraMiktari = 1234567.89m; string yazi = yaziyaCevir(paraMiktari); // Sonuç: "Bir Milyon İki Yüz Otuz Dört Bin Beş Yüz Altmış Yedi Türk Lirası Seksen Dokuz Kuruş"
🔍 Dikkat Edilen Noktalar
Yüzler basamağında 1 varsa “bir yüz” yerine “yüz” yazılır.
Sadece “bir bin” ifadesi “bin” olarak sadeleştirilir.
Gereksiz boşluklar, küçük harf/büyük harf uyumsuzlukları otomatik temizlenir.
⚙️ Gerçek Hayatta Kullanım Alanları
Sözleşme Metinleri (Noter veya Tapu Uygulamaları)
Kira ve Satış Faturaları
e-Devlet Entegrasyonları
PDF veya Word rapor üretimi (örneğin: DevExpress veya iTextSharp ile)
📌 Sonuç
Bu fonksiyon, C# tabanlı tüm masaüstü veya web projelerinde kullanılabilir. Türkçeye uygunluk açısından özenle tasarlanmış bu kod, resmi belgelerde güvenle kullanılabilir.
Kodumuz
private string yaziyaCevir(decimal tutar)
{
// Tam ve kuruş kısmını ayır
long tamKisim = (long)Math.Floor(tutar);
int kurus = (int)((tutar - tamKisim) * 100);
string[] birler = { "", "bir", "iki", "üç", "dört", "beş", "altı", "yedi", "sekiz", "dokuz" };
string[] onlar = { "", "on", "yirmi", "otuz", "kırk", "elli", "altmış", "yetmiş", "seksen", "doksan" };
string[] binler = { "", "bin", "milyon", "milyar", "trilyon", "katrilyon" };
// Tam kısmı stringe çevir (sağdan 3'er basamak alarak)
string tamStr = tamKisim.ToString();
List<string> gruplar = new List<string>();
while (tamStr.Length > 0)
{
int len = tamStr.Length >= 3 ? 3 : tamStr.Length;
gruplar.Add(tamStr.Substring(tamStr.Length - len, len));
tamStr = tamStr.Substring(0, tamStr.Length - len);
}
gruplar.Reverse();
List<string> kelimeGrupListesi = new List<string>();
for (int i = 0; i < gruplar.Count; i++)
{
string grup = gruplar[i].PadLeft(3, '0');
int yuzler = int.Parse(grup[0].ToString());
int onlarBas = int.Parse(grup[1].ToString());
int birlerBas = int.Parse(grup[2].ToString());
// Grup sıfırsa ve bir anlamı yoksa geç
if (grup == "000") continue;
string grupYazi = "";
// Yüzler
if (yuzler > 0)
{
if (yuzler == 1)
grupYazi += "yüz";
else
grupYazi += birler[yuzler] + " yüz";
}
// Onlar ve birler
if (onlarBas > 0)
{
if (grupYazi != "") grupYazi += " ";
grupYazi += onlar[onlarBas];
}
if (birlerBas > 0)
{
if (grupYazi != "") grupYazi += " ";
grupYazi += birler[birlerBas];
}
// "bin" kelimesinde özel durum: sadece "bir bin" değilse yaz
string binKelime = binler[gruplar.Count - 1 - i];
if (binKelime == "bin" && grupYazi == "bir")
{
grupYazi = "bin";
}
else if (binKelime != "")
{
if (grupYazi != "") grupYazi += " ";
grupYazi += binKelime;
}
if (!string.IsNullOrWhiteSpace(grupYazi))
kelimeGrupListesi.Add(grupYazi.Trim());
}
string yazi = kelimeGrupListesi.Count > 0 ? string.Join(" ", kelimeGrupListesi) : "sıfır";
// Kuruş kısmı
List<string> kurusKelimeListesi = new List<string>();
if (kurus > 0)
{
int onKurus = kurus / 10;
int birKurus = kurus % 10;
if (onKurus > 0)
kurusKelimeListesi.Add(onlar[onKurus]);
if (birKurus > 0)
kurusKelimeListesi.Add(birler[birKurus]);
}
string kurusYazi = string.Join(" ", kurusKelimeListesi);
if (!string.IsNullOrEmpty(kurusYazi))
yazi += " " + kurusYazi + " kuruş";
return ToTitleCase(yazi.Trim()) + " Türk Lirası";
}


