Home / Teknoloji / Bilgisayar / Yazılım / C# ile Sayıyı Yazıya Çevirme

C# ile Sayıyı Yazıya Çevirme

Oluşturacağınız yazılımda, bazı durumlarda sayısal değerleri yazı ile ifade etmeniz gerekebilir. Özellikle geçmişte geliştirilen muhasebe, fatura veya benzeri uygulamalarda, fatura tutarının yazıya çevrilmesi sık karşılaşılan bir ihtiyaçtı.

Aşağıda paylaştığım kodları yaklaşık 2010 yılı civarında bu ihtiyacı karşılamak için yazmıştım. Bu kodlar, sayısal bir tutarı Türkçe yazı karşılığına çevirerek, fatura tutarının yazı ile gösterilmesi gereken yerlerde kullanılabilecek basit bir çözüm sunuyordu. Yapay zeka çağından önce yazılmış bu kodları incelemenizin programlama yeteneğinize katkı sağlayacağı düşüncesindeyim.

Sayıyı yazıya çevirme işlemini fonksiyon olarak hazırladım ve fonksiyonun kullanıldığı küçük bir program da yazdım. Fonksiyonun çalışmasını bu program üzerinden test edebilirsiniz.

Programı indirmek için tıklayınız…

public static string YaziyaCevir(decimal tutar)
{
    string sTutar = tutar.ToString("F2").Replace('.', ','); // Replace('.',',') ondalık ayracının . olma durumu için            
    string lira = sTutar.Substring(0, sTutar.IndexOf(',')); //tutarın tam kısmı
    string kurus = sTutar.Substring(sTutar.IndexOf(',') + 1, 2);
    string yazi = "";

    string[] birler = { "", "BİR", "İKİ", "ÜÇ", "DÖRT", "BEŞ", "ALTI", "YEDİ", "SEKİZ", "DOKUZ" };
    string[] onlar = { "", "ON", "YİRMİ", "OTUZ", "KIRK", "ELLİ", "ALTMIŞ", "YETMİŞ", "SEKSEN", "DOKSAN" };
    string[] binler = { "KATRİLYON", "TRİLYON", "MİLYAR", "MİLYON", "BİN", "" }; //KATRİLYON'un önüne ekleme yapılarak artırabilir.

    int grupSayisi = 6; //sayıdaki 3'lü grup sayısı. katrilyon içi 6. (1.234,00 daki grup sayısı 2'dir.)
                        //KATRİLYON'un başına ekleyeceğiniz her değer için grup sayısını artırınız.

    lira = lira.PadLeft(grupSayisi * 3, '0'); //sayının soluna '0' eklenerek sayı 18 basakmaklı yapılıyor.            

    string grupDegeri;

    for (int i = 0; i < grupSayisi * 3; i += 3) //sayı 3'erli gruplar halinde ele alınıyor.
    {
        grupDegeri = "";

        if (lira.Substring(i, 1) != "0")
            grupDegeri += birler[Convert.ToInt32(lira.Substring(i, 1))] + "YÜZ"; //yüzler                

        if (grupDegeri == "BİRYÜZ") //biryüz düzeltiliyor.
            grupDegeri = "YÜZ";

        grupDegeri += onlar[Convert.ToInt32(lira.Substring(i + 1, 1))]; //onlar

        grupDegeri += birler[Convert.ToInt32(lira.Substring(i + 2, 1))]; //birler                

        if (grupDegeri != "") //binler
            grupDegeri += binler[i / 3];

        if (grupDegeri == "BİRBİN") //birbin düzeltiliyor.
            grupDegeri = "BİN";

        yazi += grupDegeri;
    }

    if (yazi != "")
        yazi += "TL ";

    int yaziUzunlugu = yazi.Length;

    if (kurus.Substring(0, 1) != "0") //kuruş onlar
        yazi += onlar[Convert.ToInt32(kurus.Substring(0, 1))];

    if (kurus.Substring(1, 1) != "0") //kuruş birler
        yazi += birler[Convert.ToInt32(kurus.Substring(1, 1))];

    if (yazi.Length > yaziUzunlugu)
        yazi += " Kr.";
    else
        yazi += "SIFIR Kr.";

    return yazi;
}

Bu Kodlar Hangi Amaçla Kullanılıyordu?

Geçmişte geliştirilen birçok masaüstü ve kurumsal uygulamada:

  • Fatura çıktılarında tutarın yazı ile gösterilmesi
  • Muhasebe kayıtlarında rakamsal değerin yanında yazılı karşılığın bulunması
  • Kullanıcı hatalarının azaltılması

gibi nedenlerle sayıları yazıya çeviren yardımcı metotlara ihtiyaç duyuluyordu.

Bu tür ihtiyaçlar için özel olarak yazılmış basit C# kodları, uygulama içerisinde doğrudan kullanılabiliyordu.


Günümüzde Durum Değişti mi?

Bugün e-Arşiv ve e-Fatura uygulamalarına geçilmesiyle birlikte, bu tür işlemlerin büyük bir kısmı artık:

  • Hazır servisler
  • Standartlaştırılmış çözümler
  • Merkezi sistemler

tarafından otomatik olarak gerçekleştirilmektedir.

Bu nedenle, modern e-Fatura ve e-Arşiv uygulamalarında, sayıları yazıya çeviren bu tür kodlara çoğu zaman doğrudan ihtiyaç kalmamıştır.


Bu Kodlar Neden Paylaşılıyor?

Bu kodlar, güncel bir çözüm önerisi olmaktan ziyade:

  • Eski projelerde karşılaşılan ihtiyaçları göstermek
  • Geçmişte bu tür problemlerin nasıl çözüldüğüne dair örnek sunmak
  • Benzer bir mantığı kendi uygulamasına uyarlamak isteyenler için referans olmak

amacıyla paylaşılmaktadır.

Özellikle eski sistemlerle çalışan veya geçmiş projeleri inceleyen geliştiriciler için, bu tür örnekler faydalı olabilir.


Kullanım Konusunda Dikkat Edilmesi Gerekenler

Bu kodları kullanmayı düşünenler için bazı önemli noktalar vardır:

  • Güncel e-Fatura ve e-Arşiv sistemleriyle doğrudan uyumlu değildir
  • Yeni projelerde tercih edilmesi genellikle önerilmez
  • Sadece özel veya eski sistemlerde referans amaçlı değerlendirilebilir

Bu nedenle, modern projelerde kullanılmadan önce ihtiyaçların ve mevcut altyapının dikkatlice değerlendirilmesi gerekir.


Sonuç

Sayıları yazıya çevirme işlemi, geçmişte birçok C# uygulamasında gerekli bir fonksiyondu. Ancak e-Arşiv ve e-Fatura sistemlerinin yaygınlaşmasıyla birlikte, bu ihtiyacın büyük ölçüde ortadan kalktığı söylenebilir.

Bu yazıda paylaşılan kodlar, günümüz çözümlerinden ziyade geçmişte kullanılan bir yaklaşımı ve tarihi bir uygulama örneğini temsil etmektedir. Benzer ihtiyaçları olan geliştiriciler için referans niteliğinde değerlendirilebilir.

Etiketlendi:

Cevap bırakın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir