C# Textbox1.Text + Textbox2.Text = Textbox3. Text (addieren) mit Komma oder Punkt bekome ich fehler.

  • C#

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von Murmeli81.

    C# Textbox1.Text + Textbox2.Text = Textbox3. Text (addieren) mit Komma oder Punkt bekome ich fehler.

    Hey hier das Video



    Der code für Addieren

    Spoiler anzeigen

    C#-Quellcode

    1. if (kosten1.Text == (""))
    2. kosten1.AppendText("0");
    3. if (extra11.Text == (""))
    4. extra11.AppendText("0");
    5. if (extra22.Text == (""))
    6. extra22.AppendText("0");
    7. if (extra33.Text == (""))
    8. extra33.AppendText("0");
    9. if (extra44.Text == (""))
    10. extra44.AppendText("0");
    11. nettokosten.Text = Convert.ToString(Convert.ToInt32(kosten1.Text) + Convert.ToInt32(extra11.Text) + Convert.ToInt32(extra22.Text) + Convert.ToInt32(extra33.Text) + Convert.ToInt32(extra44.Text));


    Wenn die textboxe nichts haben ersetze ich die mit gleich 0 damit kein Fehler kommt.

    Aber er rechnet nicht mit [KOMMA] , oder [PUNKT].

    Also 50+50+50 = 150 Das macht er aber sagen wir mal
    50+50,1+50,2 = ERROR

    und zwar diese Codes Also Error codes
    Spoiler anzeigen

    Quellcode

    1. System.FormatException: "Die Eingabezeichenfolge hat das falsche Format."

    C#-Quellcode

    1. Diese Ausnahme wurde ursprünglich von dieser Aufrufliste ausgelöst:
    2. System.Number.StringToNumber(string, System.Globalization.NumberStyles, ref System.Number.NumberBuffer, System.Globalization.NumberFormatInfo, bool)
    3. System.Number.ParseInt32(string, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
    4. System.Convert.ToInt32(string)
    5. word.Form1.button4_Click(object, System.EventArgs) in Form1.cs
    6. System.Windows.Forms.Control.OnClick(System.EventArgs)
    7. System.Windows.Forms.Button.OnClick(System.EventArgs)
    8. System.Windows.Forms.Button.OnMouseUp(System.Windows.Forms.MouseEventArgs)
    9. System.Windows.Forms.Control.WmMouseUp(ref System.Windows.Forms.Message, System.Windows.Forms.MouseButtons, int)
    10. System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message)
    11. System.Windows.Forms.ButtonBase.WndProc(ref System.Windows.Forms.Message)
    12. ...
    13. [Aufrufliste abgeschnitten]


    Und bei Subtrahieren (-)

    Verwende ich diesen Code
    Spoiler anzeigen

    C#-Quellcode

    1. int a = Convert.ToInt32(gesamtkosten.Text);
    2. int b = Convert.ToInt32(nettokosten.Text);
    3. int c = a - b;
    4. mwst.Text = Convert.ToString(c);


    und bekomme diese Fehler Meldung
    Spoiler anzeigen

    Quellcode

    1. ​System.FormatException: "Die Eingabezeichenfolge hat das falsche Format."

    C#-Quellcode

    1. ​Diese Ausnahme wurde ursprünglich von dieser Aufrufliste ausgelöst:
    2. System.Number.StringToNumber(string, System.Globalization.NumberStyles, ref System.Number.NumberBuffer, System.Globalization.NumberFormatInfo, bool)
    3. System.Number.ParseInt32(string, System.Globalization.NumberStyles, System.Globalization.NumberFormatInfo)
    4. System.Convert.ToInt32(string)
    5. word.Form1.button5_Click(object, System.EventArgs) in Form1.cs
    6. System.Windows.Forms.Control.OnClick(System.EventArgs)
    7. System.Windows.Forms.Button.OnClick(System.EventArgs)
    8. System.Windows.Forms.Button.OnMouseUp(System.Windows.Forms.MouseEventArgs)
    9. System.Windows.Forms.Control.WmMouseUp(ref System.Windows.Forms.Message, System.Windows.Forms.MouseButtons, int)
    10. System.Windows.Forms.Control.WndProc(ref System.Windows.Forms.Message)
    11. System.Windows.Forms.ButtonBase.WndProc(ref System.Windows.Forms.Message)
    12. ...
    13. [Aufrufliste abgeschnitten]


    Vielen dank für die Mühe <3
    @mehmetqan Convert.ToInt32() erwartet eine Ganzzahl ohne Nachkommastellen.
    Mit Nachkommastellen musst Du die Konvertierung mit dem richtigen Zeichensatz durchführen, Du musst das richtige Encoding verwenden.
    Per Default wird bei der Konvertierung ein englischer Zeichensatz erwartet, da ist das Dezimal-Trennzeichen ein Punkt,
    Du gibst im deutschen Zeichensatz ein Komma als Dezimal-Trennzeichen ein.
    Dazu verwendest Du besser double.Parse() oder besser double.TryParse():
    docs.microsoft.com/de-de/dotne…double.parse?view=net-5.0
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Lass das Ganze in VisualBasic laufen, dann wird Dir haargenau angezeigt, bei welcher TextBox das Problem ist.
    Und:
    Convert.ToInt32 -> Int.Parse, aber immer: keine Kommazahlen, sonst musst Du mit double.Parse arbeiten!
    Convert.ToString(x) -> x.ToString
    War da nicht schon mal ne Anmerkung mit NumericUpDown?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Also damit ich das richtig verstehe

    C#-Quellcode

    1. nettokosten.Text = Convert.ToString(Convert.ToInt32(kosten1.Text) + Convert.ToInt32(extra11.Text) + Convert.ToInt32(extra22.Text) + Convert.ToInt32(extra33.Text) + Convert.ToInt32(extra44.Text));


    ist ja mein code und ich muss es so schreiben

    C#-Quellcode

    1. nettokosten.Text = double.TryParse(kosten1.Text) + double.TryParse(extra11.Text) + double.TryParse(extra22.Text) + double.TryParse(extra33.Text) + double.TryParse(extra44.Text));
    ?

    Und bei minus also Subtrahieren

    C#-Quellcode

    1. int a = double.TryParse(gesamtkosten.Text);
    2. int b = double.TryParse(nettokosten.Text);
    3. int c = a - b;
    4. mwst.Text = Convert.ToString(c);


    Vielen dank für deine Mühe!
    Öhm … int a = double.TryParse(gesamtkosten.Text); Akzeptiert das C# überhaupt? Und: Aus einem Double soll ein Int werden? Und was ist mit den Nachkommastellen? Sind die unwichtig?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    mehmetqan schrieb:

    C#-Quellcode

    1. nettokosten.Text = Convert.ToString(Convert.ToInt32(kosten1.Text) + Convert.ToInt32(extra11.Text) + Convert.ToInt32(extra22.Text) + Convert.ToInt32(extra33.Text) + Convert.ToInt32(extra44.Text));
    Nö.
    Du machst den Code unnötig unverständlich.
    Konvertiere zunächst den Inhalt jeder einzelnen TextBox in einen separate numerische Variable Deines Typs. Die kannst Du addieren usw.
    Entweder
    Integer, da gibt es nur Zahlen ohne Kommastellen
    oder
    Double, da können Nachkommastellen vorkommen.
    Und die musst Du mit dem richtigen Encoding konvertieren, also Komma oder Punkt als Dezimalseparator.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    @mehmetqan Frag Frau Google nach MSDN double.TryParse():
    docs.microsoft.com/de-de/dotne…ble.tryparse?view=net-5.0
    da sind auch einige Beispiele angegeben.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Da es hier um Geld ~ Währung geht, sollte decimal anstatt double verwendet werden.

    docs.microsoft.com/de-de/dotne…ating-point-numeric-types
    Da der Typ decimal über eine höhere Genauigkeit und einen kleineren Bereich verfügt als float und double, eignet er sich für Finanz- und Währungskalkulationen.


    exceptionnotfound.net/decimal-…bout-number-types-in-net/
    stackoverflow.com/questions/11…one-should-i-use-and-when

    mehmetqan schrieb:

    Es funk. Einwandfre.
    Und nun gib mal statt 17,50 € => "Roulade mit Klößen" ein. ;)
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Könnten ihr mir ein Beispiel code schreiben mit
    C#-Quellcode
    double.TryParse()

    Ich verwende das jeweils so:

    C#-Quellcode

    1. string s;
    2. bool erfolgreich;
    3. erfolgreich = double.TryParse(s, out d);

    Wenn erfolgreich == true ist, hat alles gekappt, und in der Variable d steht der Wert aus der TextBox.
    Bei false kannst Du z.B. eine MessageBox mit einem Hinweis anzeigen.

    Murmeli81 schrieb:

    Ich verwende das jeweils so
    allerdings nur so ungefähr.
    Wenn Du hier solch Code postest, sollte der zumindest compilieren, also so was:

    C#-Quellcode

    1. string s = "42";
    2. bool erfolgreich;
    3. double d;
    4. erfolgreich = double.TryParse(s, out d);
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Dass der Code compilieret habe ich nie behauptet. War wie geschrieben als Anregung gedacht, nicht als funktionierendes Beispiel.
    Bei d habe ich mich getäuscht. Hatte es so in Erinnerung.

    Nun habe ich bei der Hilfestellung auch was gelernt:
    1. Kein Anregungen, sondern Beispiele posten
    2. Nicht aus dem Kopf, sondern nur getester Code posten

    Sorry. Hoffe dass meine Anregung für mehmetqan wenigstens was gebracht hat. So kann er nun "Roulade mit Klößen" eingeben.
    Nun ja, gut gemeint ist das Gegenteil von gut gemacht. :)