Sayıyı yazıya dönüştürme

123 => yüzyirmiüç olarak yazdırma :)

Verilen bir sayıyı, yazı olarak yazdırma işini yapan bir metod yazayım dedim:

static string SayiToYazi(string sayi)
{
    int max_basamak = 30;
    string[] birler = { "", "bir", "iki", "üç", "dört", "beş", "altı", "yedi", "sekiz", "dokuz" };
    string[] onlar = { "", "on", "yirmi", "otuz", "kırk", "elli", "altmış", "yetmiş", "seksen", "doksan" };
    // daha büyük sayılar için: http://dalt.in/Kf49Z
    string[] binler = { "oktilyon", "septilyon", "seksilyon", "kentilyon", "katrilyon", "trilyon", "milyar", "milyon", "bin", "" };
    int[] basamaklar = new int[3];
    string sonuc = "";
    //sayının kullanılmayan basamaklarını sıfırla doldur
    sayi = sayi.PadLeft(max_basamak, '0');
    //sayıyı üçerli basamaklara ayır
    for (int i = 0; i < max_basamak / 3; i++)
    {
        string temp = "";
        //yüzler basamağı
        basamaklar[0] = (int)(sayi[i * 3] - '0');
        //onlar basamağı
        basamaklar[1] = (int)(sayi[i * 3 + 1] - '0');
        //birler basamağı
        basamaklar[2] = (int)(sayi[i * 3 + 2] - '0');

        if (basamaklar[0] == 0)
            temp = ""; //yüzler basamağı boş
        else
            if (basamaklar[0] == 1)
                temp = "yüz"; //yüzler basamağında 1 varsa
            else
                temp = birler[basamaklar[0]] + "yüz";  // birleştir

        //yüzler+onlar+birler basamağını birleştir
        temp += onlar[basamaklar[1]] + birler[basamaklar[2]];

        //basamak değeri oluşmadıysa yani 000 ise binler basamağını ekle
        if (!string.IsNullOrEmpty(temp)) temp += binler[i];
        //birbin olmaz
        if ((i > 1) && (temp.Equals("birbin"))) temp = "bin";
        if (temp != "") sonuc += temp + " ";
    }
    if (string.IsNullOrEmpty(sonuc.Trim()))
        sonuc = "sıfır";
    return sonuc.Trim();
}

static string SayiToYazi(int sayi)
{
    return SayiToYazi(sayi.ToString());
}

static void Main(string[] args)
{
    Console.WriteLine(SayiToYazi("1234567890"));

    Console.ReadKey();
}

Sonuç:

İşi daha da abartıp daha büyük bir sayı yazalım:

static void Main(string[] args)
{
    Console.WriteLine(SayiToYazi("123456789012345678901234567890"));

    Console.ReadKey();
}

Çıktı:

Bu method 30 basamağa kadar olan sayıları yazdırabiliyor.

Daha büyük sayılar için http://dalt.in/Kf49Z adresine göz atabilirsiniz.

Ayrıca dileyenler bu metodu, genişletme metodu olarak da değiştirebilir ve daha kolay bir şekilde kullanabilirler.

Class dosyasını indirmek için buraya tıklayınız.