none
Bruttorechner Programmierhilfe (Text Box Inhalt in Label ausgeben) RRS feed

  • Frage

  • Hey,

    ich bin noch ein C# Anfänger. Ich muss nun für die Schule einen Bruttorechner programmieren. Dieser Rechner soll wenn der entsprechende Radio Button aktiviert ist unten im Label die Mehrwertsteuer sowie den Bruttogehalt ausgeben. Nun bekomme ich aber jedes mal eine Fehlermeldung, warum auch immer. Habe unten Screenshots angehängt, hoffe mir kann da jemand helfen.

    Hier der Code für den Berechnen -Button, welcher die Fehlermeldung in der Zeile lblA3.Text = i * 100 / 19 anzeigt:

     private void cmdBerechnen_Click(object sender, EventArgs e)
            {
                int i;
                if (txtEingabe.Text == "")
                    return;
                i = Convert.ToInt32(txtEingabe.Text);
    
                    if (rB3.Checked)
                        lblA3.Text = i * 100 / 19;
                
            }

    Mittwoch, 1. Juni 2016 20:11

Antworten

  • Hallo Felix,

    bitte poste immer die genaue und vollständige Fehlermeldung, die Du erhältst und gib die Codezeile an, die den Fehler auslöst. Das hilft uns enorm bei der Fehlersuche und bei der Hilfestellung, letztendlich also auch dir, da Du dann schneller (oder überhaupt erst) eine Antwort erhältst.

    Mein Versuch: Ich nehme mal an, es kommt ein Fehler in der Zeile mit lblA3.Text = ...? Falls liegt das daran, dass ein double/decimal/int/... nunmal kein String ist, die "Text" Eigenschaft eines Labels aber einen String erwartet.

    lblA3.Text = ( 5 * 100 / 19 ).ToString();

    wäre dann eine Möglichkeit. Allerdings kommt dabei dann ein ganzzahliger Wert raus, was wahrscheinlich nicht das gewünschte Ergebnis darstellt, oder?

    lblA3.Text = ( 5 * 100.0 / 19.0 ).ToString();

    Kommt dem gewünschten Eregbnis wahrscheinlich schon eher nahe.

    lblA3.Text = ( 5 * 100.0 / 19.0 ).ToString( "N2" );

    reduziert das Ergebnis dann auf 2 Nachkommastellen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 1. Juni 2016 21:13
    Moderator
  • Hallo felix mal so ein kleiner Tipp am Rande um von i 19% zu bekommen darfst du nicht "i * 100 / 19" sondern musst "i *19 / 100" rechnen oder einfach "(double)i * 0.19D" das gibt dir auch 19% aus. Ist aber nur ganz einfache Prozentrechnung^^.

    Als letztes wäre es gut das ganze noch in einen string umzuwandeln, da so einer ja auch angezeigt werden soll : 

    lblA3.Text = ((double)i * 0.19D).ToString();

    Ich hoffe ich konnte dir helfen^^

    Falls das nicht hilft schick bitte mal deine Fehlermeldung


    My website: http://www.dragonskills99.16mb.com



    Freitag, 3. Juni 2016 13:13
  • Hallo Felix,

    poste bitte in Zukunft die Fehlermeldung immer mit, nicht immer ist es so offensichtlich für einen Experten woran es scheitert.

    Wenn du den Teil rechts neben dem = ausrechnest kommt wieder ein Integer raus[1]. Die Text-Eigenschaft ist dagegen ein string und diese Typen kann man zwar in einander konvertieren, aber das muss man auch explizit angeben. Also so hier:

    lblA3.Text = (i * 100 / 19).ToString();

    Da i sowie die 19 und 100 je ein Integer ist kommt als Ergebnis auch wieder ein Integer heraus. Das heißt der KOmmateil des Ergebnisses würde fehlen. Daher musst du entweder ein D an die Zahlen anhängen oder den Kommateil 0 mit anfügen. Nachfolgend mal beides gezeigt:

    lblA3.Text = (i * 100D / 19.0).ToString();

    Dann wird auch der Kommaanteil mit berücksichtigt.

    PS: Schau dir mal double.TryParse an, für den Fall dass du Falscheingaben (Buchstaben o.ä.) auch richtig verarbeiten willst.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Mittwoch, 1. Juni 2016 21:12
    Moderator

Alle Antworten

  • Hallo Felix,

    poste bitte in Zukunft die Fehlermeldung immer mit, nicht immer ist es so offensichtlich für einen Experten woran es scheitert.

    Wenn du den Teil rechts neben dem = ausrechnest kommt wieder ein Integer raus[1]. Die Text-Eigenschaft ist dagegen ein string und diese Typen kann man zwar in einander konvertieren, aber das muss man auch explizit angeben. Also so hier:

    lblA3.Text = (i * 100 / 19).ToString();

    Da i sowie die 19 und 100 je ein Integer ist kommt als Ergebnis auch wieder ein Integer heraus. Das heißt der KOmmateil des Ergebnisses würde fehlen. Daher musst du entweder ein D an die Zahlen anhängen oder den Kommateil 0 mit anfügen. Nachfolgend mal beides gezeigt:

    lblA3.Text = (i * 100D / 19.0).ToString();

    Dann wird auch der Kommaanteil mit berücksichtigt.

    PS: Schau dir mal double.TryParse an, für den Fall dass du Falscheingaben (Buchstaben o.ä.) auch richtig verarbeiten willst.


    Tom Lambert - .NET (C#) MVP
    Wozu Antworten markieren und für Beiträge abstimmen? Klicke hier.
    Nützliche Links: .NET Quellcode | C# ↔ VB.NET Konverter | Account bestätigen (Verify Your Account)
    Ich: Webseite | Code Beispiele | Facebook | Twitter | Snippets

    Mittwoch, 1. Juni 2016 21:12
    Moderator
  • Hallo Felix,

    bitte poste immer die genaue und vollständige Fehlermeldung, die Du erhältst und gib die Codezeile an, die den Fehler auslöst. Das hilft uns enorm bei der Fehlersuche und bei der Hilfestellung, letztendlich also auch dir, da Du dann schneller (oder überhaupt erst) eine Antwort erhältst.

    Mein Versuch: Ich nehme mal an, es kommt ein Fehler in der Zeile mit lblA3.Text = ...? Falls liegt das daran, dass ein double/decimal/int/... nunmal kein String ist, die "Text" Eigenschaft eines Labels aber einen String erwartet.

    lblA3.Text = ( 5 * 100 / 19 ).ToString();

    wäre dann eine Möglichkeit. Allerdings kommt dabei dann ein ganzzahliger Wert raus, was wahrscheinlich nicht das gewünschte Ergebnis darstellt, oder?

    lblA3.Text = ( 5 * 100.0 / 19.0 ).ToString();

    Kommt dem gewünschten Eregbnis wahrscheinlich schon eher nahe.

    lblA3.Text = ( 5 * 100.0 / 19.0 ).ToString( "N2" );

    reduziert das Ergebnis dann auf 2 Nachkommastellen.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Mittwoch, 1. Juni 2016 21:13
    Moderator
  • Hallo felix mal so ein kleiner Tipp am Rande um von i 19% zu bekommen darfst du nicht "i * 100 / 19" sondern musst "i *19 / 100" rechnen oder einfach "(double)i * 0.19D" das gibt dir auch 19% aus. Ist aber nur ganz einfache Prozentrechnung^^.

    Als letztes wäre es gut das ganze noch in einen string umzuwandeln, da so einer ja auch angezeigt werden soll : 

    lblA3.Text = ((double)i * 0.19D).ToString();

    Ich hoffe ich konnte dir helfen^^

    Falls das nicht hilft schick bitte mal deine Fehlermeldung


    My website: http://www.dragonskills99.16mb.com



    Freitag, 3. Juni 2016 13:13
  • Hi,

    um mein Senf auch noch dazu zu geben :)

    Hier meine Variante die die meisten Fehler abfangen sollte:

    // Do not allow empty input
    if (string.IsNullOrWhiteSpace(txtEingabe.Text))
    {
        return;
    }
    
    uint i = 0;
    if(uint.TryParse(txtEingabe.Text, out i) == false)
    {
        return; // String isn't a unsigned number
    }
    
    if (rB3.Checked)
    {
        lblA3.Text = ((i / 19) * 100).ToString();
    }

    Gruß,

    David

    Sonntag, 5. Juni 2016 18:20