23 Kasım 2017 Perşembe
Twitter

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.

Değerlendirme

Yazım dilinin sadeliği ve anlaşılabilirliği Puan: 2,50 (4 oy)
Yazıdaki kodların kalitesi Puan: 2,78 (4 oy)
İhtiyaca cevap verme Puan: 3,06 (4 oy)
Tavsiye edilebilirlik Puan: 3,28 (4 oy)
Genel değerlendirme Puan: 3,69 (4 oy)
Puanlamalar 5 üzerindendir.
  • Site Yorumlarý
  • Facebook Yorumlarý Facebook Yorumlarý
Yeni yorum yaz Toplam: 3, Onay bekleyen: 0.
  1. ahmet

    çok akıllıca bir kod keşke kuruşta olsaymış.

  2. Devrim Altınkurt

    :) kolayı var. virgülden öncesini ve sonrasını ayrı ayrı SayiToYazi metoduna verirsin olur biter:)

    • kerim

      kardesh buna kurush ekleyemedim bir turlu birde bu metodu text boxsun keypress eventine nasil cagricaz ? yardimci olursaniz cok sevinirim onceden teshekkurler