C# ile Tam Sayıları Yazılı Sayılara Dönüştürme

Hiç tam sayıları yazılı forma dönüştürmek zorunda kaldınız mı? Bu, rapor oluşturma, çek yazma veya sayıları metin içeriğinde daha okunabilir hale getirme gibi çeşitli uygulamalarda yaygın bir gerekliliktir. Örneğin, 21 sayısını "Yirmi Bir" olarak dönüştürmek isteyebilirsiniz.

Peki ya devasa bir arama tablosuna dayanmayan bir çözüm istiyorsanız? Bu blog yazısında, tam sayıları yazılı sayılara dönüştürmek için C#’ta düzenli ve verimli bir yöntemi keşfedeceğiz.

Problem

Tam sayıları yazılı forma dönüştürmek için birçok geliştirici genellikle büyük arama tablolarına başvurur, bu da bakımını zor ve zahmetli hale getirebilir. Bunun yerine, temel dize manipülasyonu ve özyineleme kullanarak daha şık bir çözüm keşfedeceğiz.

Çözüm

Kendi yazılı biçimimizi kademeli olarak oluşturmak için sayıların kategorize edilmesi için diziler kullanan bir özel sınıf ve bir özyinelemeli fonksiyonla hedefimize ulaşabiliriz. Bunu adım adım inceleyelim.

HumanFriendlyInteger Sınıfı

Aşağıdaki sınıf, tam sayıları yazılı karşılıklarına dönüştürme yöntemini içerir:

public static class HumanFriendlyInteger
{
    static string[] ones = new string[] { "", "Bir", "İki", "Üç", "Dört", "Beş", "Altı", "Yedi", "Sekiz", "Dokuz" };
    static string[] teens = new string[] { "On", "On Bir", "On İki", "On Üç", "On Dört", "On Beş", "On Altı", "On Yedi", "On Sekiz", "On Dokuz" };
    static string[] tens = new string[] { "Yirmi", "Otuz", "Kırk", "Elli", "Altmış", "Yetmiş", "Seksen", "Doksan" };
    static string[] thousandsGroups = { "", " Bin", " Milyon", " Milyar" };

    private static string FriendlyInteger(int n, string leftDigits, int thousands)
    {
        // Sayının değerine göre özel durumların işlenmesi
        if (n == 0)
        {
            return leftDigits;
        }

        string friendlyInt = leftDigits;

        if (friendlyInt.Length > 0)
        {
            friendlyInt += " ";
        }

        if (n < 10)
        {
            friendlyInt += ones[n];
        }
        else if (n < 20)
        {
            friendlyInt += teens[n - 10];
        }
        else if (n < 100)
        {
            friendlyInt += FriendlyInteger(n % 10, tens[n / 10 - 2], 0);
        }
        else if (n < 1000)
        {
            friendlyInt += FriendlyInteger(n % 100, (ones[n / 100] + " Yüz"), 0);
        }
        else
        {
            friendlyInt += FriendlyInteger(n % 1000, FriendlyInteger(n / 1000, "", thousands + 1), 0);
            if (n % 1000 == 0)
            {
                return friendlyInt;
            }
        }

        return friendlyInt + thousandsGroups[thousands];
    }

    public static string IntegerToWritten(int n)
    {
        if (n == 0)
        {
            return "Sıfır";
        }
        else if (n < 0)
        {
            return "Negatif " + IntegerToWritten(-n);
        }

        return FriendlyInteger(n, "", 0);
    }
}

Kodun Ayrıntıları

  • Statik Diziler: Sınıf, sayıları yazılı biçimlerde saklamak için dört statik dizi kullanır:

    • ones: 1-9 arasındaki sayıların kelimelerini içerir.
    • teens: 10-19 arasındaki sayıların kelimelerini içerir.
    • tens: Onun katları için kelimeleri içerir (20, 30, vb.).
    • thousandsGroups: Bin, milyon gibi daha büyük değerlerin kelimelerini tutar.
  • FriendlyInteger Metodu: Bu özyinelemeli yöntem, sayıyı yönetilebilir parçalara ayırır:

    • Sayının boyutlarına (birler, onlu sayılar, yetmişler, yüzler ve binler) göre yapı oluşturur.
    • Her çağrı, sayının hangi kategoriye girdiğini kontrol ederek dize temsilini özyinelemeli olarak oluşturur.
  • IntegerToWritten Metodu: Bu, tam sayıları dönüştürmek için kullanılan kamuya açık yöntemdir. Sıfır ve negatif sayıları ele alır ve ardından FriendlyInteger yöntemini çağırır.

Sonuç

Bu yöntemi kullanarak, tam sayıları yazılı biçimlerine C#’ta verimli bir şekilde dönüştürebilirsiniz. Bu çözüm, hem şık hem de büyük arama tablolarını sürdürme zahmetinden kaçınmayı sağlar.

Bir dahaki sefere metin içinde sayıları görüntülemeniz gerektiğinde, bu yaklaşımı deneyin ve temiz, insan dostu çıktının tadını çıkarın!