Laden...

Zahlen (Ziffernfolgen) in Zahlwörter (z.B. fünfundsiebzig) umwandeln

Erstellt von marioshasta vor 12 Jahren Letzter Beitrag vor 12 Jahren 8.411 Views
Thema geschlossen
Hinweis von herbivore vor 12 Jahren

Titel präzisiert

M
marioshasta Themenstarter:in
5 Beiträge seit 2011
vor 12 Jahren
Zahlen (Ziffernfolgen) in Zahlwörter (z.B. fünfundsiebzig) umwandeln

Hallo

ich möchte gern Zahlen in Buchstaben wandeln Textbox1 Zahl und Textbox2 in Buchstaben.

Wie muss ich das machen, habe leider nocht nicht soviel Erfahrungen mit C# lerne halt noch.

LG

marioshasta

3.430 Beiträge seit 2007
vor 12 Jahren

Hallo marioshaste,

was meinst du mit Textbox2 in Buchstaben?
Wie willst du eine Zahl in Buchstaben umwandeln bzw. was stellst du dir da als Ergebnis vor?

Bitte beachte: [Hinweis] Wie poste ich richtig? 1.1 und 1.1.1

Grüße
Michael

5.657 Beiträge seit 2006
vor 12 Jahren

Bitte beachte:
>
1.1 und 1.1.1

Und vor allem Punkt 5: Problem genau beschreiben - inkl. genauer Fehlermeldung - und konkrete Fragen stellen

Weeks of programming can save you hours of planning

M
marioshasta Themenstarter:in
5 Beiträge seit 2011
vor 12 Jahren

In Textbox 1 ist eine x beliebige zahl diese soll in Textbox2 in Buchstaben ausgegeben werden. Besipiel Textbox 1 = 5 ergebnis in Textbox2 = fünf.

Mein Problem ist es das ich nicht weiss wie ich es umsetzen soll.

M
marioshasta Themenstarter:in
5 Beiträge seit 2011
vor 12 Jahren

Ok nach dem mich das nochmal angeschaut bin ich hier wohl offentsichtlich verkehrt. Das Forum ist nur für Profis!!! Schade das man in solchen Foren wie mein mycsharp keine Hilfe bekommt.

Hinweis von herbivore vor 12 Jahren

Nein, das Forum ist _nicht _nur für Profis. Es sind nach Punkt 1.1.1 lediglich keine Fragen nach Grundlagen erlaubt. Das ist was ganz anders.

Und auch Profis müssen sich nach Punkt 5 richten, also das Problem genau beschreiben. Also insbesondere, was sie schon versucht haben und an genau welcher Stelle sie nicht weiterkommen. Auch Profis dürfen nach Punkt 4 nicht einfach nach fertigen Lösungen oder pauschal danach "wie man etwas macht" fragen.

Jeder, der sich daran hält, ist willkommen, egal ob Anfänger oder Profi. Und jeder, der sich daran hält, wird nach Kräften unsere Hilfe bekommen.

1.346 Beiträge seit 2008
vor 12 Jahren

Zahlen richtig als Zeichenkette auszugeben ist wahrscheinlich nicht ganz so banal wie es sich anhört. Ich habe einmal kurz gegoogelt und einen Artikel dazu gefunden. Er ist zwar für die Englische ausgabe, aber du kannst es dir ja mal durchgucken und versuchen es entsprechend für Deutsch zu ändern.

http://www.blackwasp.co.uk/NumberToWords.aspx

5.657 Beiträge seit 2006
vor 12 Jahren

Ok nach dem mich das nochmal angeschaut bin ich hier wohl offentsichtlich verkehrt. Das Forum ist nur für Profis!!! Schade das man in solchen Foren wie mein mycsharp keine Hilfe bekommt.

Wieso, was spricht denn dagegen, sein Problem so zu beschreiben, daß auch für andere verständlich ist?

Jedenfalls hab ich dein Problem jetzt verstanden, und kann dir nur sagen, daß es dafür keine automatische Lösung gibt. Du solltest aber mit einer switch-Anweisung relativ schnell eine eigene Lösung programmieren können.

Christian

Weeks of programming can save you hours of planning

1.552 Beiträge seit 2010
vor 12 Jahren

Hallo marioshasta,

wobei es im englischen noch einfacherer ist Zahlen als Buchstaben umzuschreiben, da die Zahlen ausgesprochen werden wie sie geschrieben werden. In Deutsch ist dies jedoch anders:
74: EN: Seventy-four
DE: Vierundsiebzig
ich denke dies ist sicher die größte Herausforderung.

Gerne helfen wir bei Fragen weiter und würden uns freuen wenn du das Ergebnis wenn du willst uns allen hier zur Verfügung stellst.

Gruß
Michael

Mein Blog
Meine WPF-Druckbibliothek: auf Wordpress, myCSharp

S
322 Beiträge seit 2007
vor 12 Jahren

Hallo,

ich hab da was gefunden:


using System;


namespace NrToText
{
     /// <summary>
    /// Converts number in text
    /// </summary>
    public class ConvertToNumber
    {
        private long m_nr;
        private enum NrTypes { Count, Feminin, Masc };
        private NrTypes nrt = NrTypes.Count;
        public ConvertToNumber(long i)
        {
            m_nr = i;
        }
        public override string ToString()
        {
            const long milliard = (int)1e9;
            const long million = (int)1e6;
            const long tausend = (int)1e3;
            if (m_nr < tausend)
                return NullTo999();
            string ret = "";
            int md = (int)(m_nr / milliard);
            if (md != 0)
            {
                ConvertToNumber c = new ConvertToNumber(md);
                c.nrt = NrTypes.Feminin;
                ret = ret + c.NullTo999(); // to throw an exception if too big!
                if (md == 1)
                    ret = ret + "milliarde";
                else
                    ret = ret + "milliarden"; // echt milliarder :)
            }
            int mn = (int)((m_nr - md * milliard) / million);
            if (mn != 0)
            {
                ConvertToNumber v = new ConvertToNumber(mn);
                v.nrt = NrTypes.Feminin;
                ret = ret + v.NullTo999();
                if (mn == 1)
                    ret = ret + "millione";
                else
                    ret = ret + "millionen";
            }
            int tz = (int)((m_nr - md * milliard - mn * million) / tausend);
            if (tz != 0)
            {
                ConvertToNumber v = new ConvertToNumber(tz);
                v.nrt = NrTypes.Masc;  // eintausend !!
                ret = ret + v.NullTo999() + "tausend";
            }
            int einheit = (int)(m_nr - md * milliard - mn * million - tz * tausend);
            if (einheit != 0)
            {
                ConvertToNumber b = new ConvertToNumber(einheit);
                ret = ret + b.ToString();
            }
            return ret;
        }

        private string NullTo999()
        {
            if (m_nr > 999)
                throw new Exception();
            if (m_nr < 100)
                return NullTo99();
            int hund = (int)(m_nr / 100);
            string ret = "";
            if (hund != 0)
            {
                ConvertToNumber c = new ConvertToNumber(hund);
                c.nrt = NrTypes.Masc; // neuter ist gleich 
                ret = c.ToString() + "hundert";
            }
            ConvertToNumber c1 = new ConvertToNumber(m_nr % 100);
            ret = ret + c1.ToString();
            return ret;
        }

        private string NullTo99()
        {
            if (m_nr > 99)
                throw new Exception();
            if (m_nr < 13)
                return NullTo12();
            if (13 <= m_nr && m_nr < 20)
            {
                ConvertToNumber c = new ConvertToNumber(m_nr - 10);
                return c.GetNrCompForm() + "zehn";

            }

            // bigger then 20
            int deci = (int)m_nr / 10;
            int unit = (int)m_nr % 10;
            string ret = "";
            if (unit != 0)
            {
                ConvertToNumber c = new ConvertToNumber(unit);
                ret = c.ToString() + "und";
            }
            ConvertToNumber x = new ConvertToNumber(deci);
            ret = ret + x.GetNrCompForm() + "zig";
            return ret;
        }

        private string GetNrCompForm()
        {
            if (m_nr > 9)
                throw new Exception();
            string r = NullTo12();
            if (m_nr == 2)
                return "zwan"; // für zwanzig
            if (m_nr == 6)
                return "sech"; // für siebzig und siebzehn
            if (m_nr == 7)
                return "sieb"; // für siebzig und siebzehn
            return r; // correct number
        }





        private string NullTo12()
        {
            switch (m_nr)
            {
                case 0:
                    return "nul";
                case 1:
                    {
                        return GetEins();
                    }
                case 2:
                    return "zwei";
                case 3:
                    return "drei";
                case 4:
                    return "vier";
                case 5:
                    return "fünf";
                case 6:
                    return "sechs";
                case 7:
                    return "sieben";
                case 8:
                    return "acht";
                case 9:
                    return "neun";
                case 10:
                    return "zehn";
                case 11:
                    return "elf";
                case 12:
                    return "zwölf";
                default:
                    throw new Exception();
            }
        }

        private string GetEins()
        {
            switch (nrt)
            {
                case NrTypes.Count:
                    return "eins";
                case NrTypes.Masc:
                    return "ein";
                case NrTypes.Feminin:
                    return "eine";
            }
            return "";
        }
    }


}

so aufrufen:


using System;
using NrToText;
namespace ConsoleApplication1
{
	/// <summary>
	/// Entry point
	/// </summary>
	class Class1
	{
		static void Main(string[] args)
		{
			Console.Write("Geben Sie Ihres Nummer:");
			string input;
			input=Console.ReadLine();
			long v=0;
			try
			{
				v=Int64.Parse(input);
				ConvertToNumber c;
				c = new ConvertToNumber(v);
				Console.WriteLine(c.ToString());
			}
			catch(Exception)
			{
				Console.WriteLine("Falsche Eingabe.");
			}
            Console.WriteLine("Drucken Sie eine beliebige Taste um das Programm zu beenden.");
            Console.ReadKey();

		}
	}
}


(ich habe es nicht getestet!)

Gruß
Steffen

Hinweis von herbivore vor 12 Jahren

In vielen Fällen kann es hilfreich und sinnvoll sein, eine fertige Lösung zu posten. Allerdings sollte man sich damit bei Fragen, die nach Übungsaufgaben oder Hausaufgaben riechen, doch zurückhalten, denn damit bringt man die Hilfesuchenden leicht um den Lerneffekt.

Thema geschlossen