Umwandlung von Ganzzahlen in Geschriebene Zahlen in C#

Haben Sie sich jemals in der Situation befunden, Ganzzahlen in ihre geschriebene Form umzuwandeln? Dies ist eine gängige Anforderung in verschiedenen Anwendungen, wie zum Beispiel beim Generieren von Berichten, beim Ausstellen von Schecks oder einfach um Zahlen in Textinhalten leichter lesbar zu machen. Beispielsweise müssen Sie möglicherweise die Zahl 21 in "Einundzwanzig" umwandeln.

Was ist jedoch, wenn Sie eine Lösung möchten, die nicht auf einer riesigen Lookup-Tabelle basiert? In diesem Blogbeitrag werden wir eine saubere und effiziente Methode in C# zur Umwandlung von Ganzzahlen in geschriebene Zahlen untersuchen.

Das Problem

Um Ganzzahlen in geschriebene Form umzuwandeln, greifen viele Entwickler normalerweise auf umfangreiche Lookup-Tabellen zurück, die umständlich und schwer zu warten sein können. Stattdessen werden wir eine elegantere Lösung unter Verwendung grundlegender String-Manipulation und Rekursion erarbeiten.

Die Lösung

Wir können unser Ziel mit einer benutzerdefinierten Klasse erreichen, die Arrays zur Kategorisierung von Zahlen verwendet und eine rekursive Funktion, um die geschriebene Form schrittweise zu erstellen. Lassen Sie uns dies Schritt für Schritt aufschlüsseln.

Die HumanFriendlyInteger Klasse

Die folgende Klasse enthält die Methode zur Umwandlung von Ganzzahlen in ihre geschriebenen Äquivalente:

public static class HumanFriendlyInteger
{
    static string[] ones = new string[] { "", "Eins", "Zwei", "Drei", "Vier", "Fünf", "Sechs", "Sieben", "Acht", "Neun" };
    static string[] teens = new string[] { "Zehn", "Elf", "Zwölf", "Dreizehn", "Vierzehn", "Fünfzehn", "Sechzehn", "Siebenzehn", "Achtzehn", "Neunzehn" };
    static string[] tens = new string[] { "Zwanzig", "Dreißig", "Vierzig", "Fünfzig", "Sechzig", "Siebzig", "Achtzig", "Neunzig" };
    static string[] thousandsGroups = { "", " Tausend", " Million", " Milliarde" };

    private static string FriendlyInteger(int n, string leftDigits, int thousands)
    {
        // Umgang mit speziellen Fällen basierend auf dem Wert der Zahl
        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] + " Hundert"), 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 "Null";
        }
        else if (n < 0)
        {
            return "Minus " + IntegerToWritten(-n);
        }

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

Aufschlüsselung des Codes

  • Statische Arrays: Die Klasse verwendet vier statische Arrays, um die geschriebenen Formen der Zahlen zu speichern:

    • ones: Enthält Wörter für die Zahlen 1-9.
    • teens: Enthält Wörter für die Zahlen 10-19.
    • tens: Enthält Wörter für Vielfache von zehn (20, 30 usw.).
    • thousandsGroups: Enthält Wörter für höhere Werte wie Tausend, Million usw.
  • FriendlyInteger Methode: Diese rekursive Methode zerlegt die Zahl in handhabbare Teile:

    • Sie behandelt die Konstruktionen der Zahlen basierend auf ihrer Größe (Einsen, Zehner, Hunderter und Tausender).
    • Jeder Aufruf baut die String-Darstellung rekursiv auf, indem er prüft, in welche Kategorie die Zahl fällt.
  • IntegerToWritten Methode: Dies ist die öffentliche Methode zur Umwandlung von Ganzzahlen. Sie verarbeitet Null- und negative Zahlen, bevor sie die Methode FriendlyInteger aufruft.

Fazit

Mit dieser Methode können Sie effizient Ganzzahlen in ihre geschriebene Form in C# umwandeln. Diese Lösung ist nicht nur elegant, sondern vermeidet auch die Mühe, umfangreiche Lookup-Tabellen zu pflegen.

Beim nächsten Mal, wenn Sie Zahlen in Text anzeigen müssen, probieren Sie diesen Ansatz aus und genießen Sie die saubere, menschliche Ausgabe!