C# Anfänger, Problem bei variablenumwandlung

  • Hi! Ich bin neu hier und Anfänger, wir programmieren in der Schule mit C# und müssen eine Aufgabe machen. Jetzt hab ich ein Problem bei der Umwandlung von einer float variable die das Programm aus einer combobox lesen soll.
    Die folgende Zeile wird grün unterlegt und es erscheint die unten stehende Fehlermeldung.

    C#-Code:
    private void BerechnePromille()
    {
    float Mengex,AlkWert,Gewichtx;
    string Geschlechtx;

    Geschlechtx = Geschlecht.Text;
    Gewichtx = Convert.ToSingle(Gewicht.Text);
    Mengex = Convert.ToSingle(Menge.Text);

    if (Geschlechtx == "männlich")
    {
    AlkWert = (((Mengex * 0.48F)*0.8F)/(Gewichtx * 0.7F));
    }
    else 
    {
    AlkWert = (((Mengex * 0.048F)*0.8F)/(Gewichtx *0.6F));
    }

    Ausgabe.Text = AlkWert.ToString("0.00");
    }

    Fehlermeldung: be zeile :Gewichtx = Convert.ToSingle(Gewicht.Text);


    Eine nicht behandelte Ausnahme des Typs 'System.FormatException' ist in mscorlib.dll aufgetreten.
    Zusätzliche Informationen: Die Eingabezeichenfolge hat das falsche Format.

    MFG Tensai

  • Du solltest natürlich schon irgendwo abfragen, ob das übergebene Gewicht überhaupt in einen Float-Wert konvertiert werden _kann_. Wenn dir irgendjemand "bla" eingibt, ist das klar, daß das kein Float ist.

    Dipper dipper dii dipper dii dipper dii duuu

  • Villeicht hätte ich bei schreiben sollen das es dich bei den Werten die man eingibt um ComboBoxen handelt. Also sind es auf jeden fall float werte.

  • Wie heißen denn die Strings in den Comboboxen? Vielleicht hast du nur Punkte mit Kommas vertauscht, oder sonst falsch formatiert.

    "Egbert B. Gebstadter is the Egbert B. Gebstadter of indirect self-reference." - Egbert B. Gebstadter

  • Hallo Tensai!

    Zitat von Tensai

    Hi nochmal!

    Die Werte in den Comboboxen haben nen punkt wie z.B 500.0
    und die strings sind männlich und weiblich

    Gewicht.Text liefert dir hier nur den text, der zu der combobox gehört (das ist wahrscheinlich nichts brauchbares). Was du haben möchstest ist der string, den du (wahrscheinlich) als item in der combobox abgelegt hast.

    Versuche mal

    Code
    Gewichtx  = Convert.ToSingle((string) Gewicht.SelectedItem);

    Ich hoffe ich liege damit richtig. Wenn nicht, poste doch bitte den code, in dem du deine comboboxen mit werten füllst.

    lass dir bei solchen problemen immer zuerst alle werte ausgeben, und schränke so die fehlerquelle ein. Wenn dir z.b eine exception sagt, dass einstring nicht in ein float konvertiert werden kann, dann ist der erste logische schritt, sich diesen string einmal anzusehen (zum beispiel irgendwo ausgeben lassen).


    und zum schluss noch ein notwendiger hinweis auf unser FAQ.

  • Zitat von a9bejo

    Gewicht.Text liefert dir hier nur den text, der zu der combobox gehört (das ist wahrscheinlich nichts brauchbares). Was du haben möchstest ist der string, den du (wahrscheinlich) als item in der combobox abgelegt hast.

    falsch, Gewicht.Text liefert den Text zurück der gerade in der combo angezeigt wird.

    Zitat von a9bejo
    Code
    Gewichtx  = Convert.ToSingle((string) Gewicht.SelectedItem);

    entweder

    Code
    Gewichtx  = Convert.ToSingle(Gewicht.SelectedItem.ToString());


    oder

    Code
    Gewichtx  = Convert.ToSingle(Gewicht.SelectedItem);

    zum ersten poster:
    schreib mal bevor du die floats deklarierst folgendes
    MessageBox.Show(Gewicht.Text);
    und poste was er dir anzeigt

    noch was:
    AlkWert = (((Mengex * 0.48F)*0.8F)/(Gewichtx * 0.7F));

    (((Mengex * 0.48F)*0.8F)/(Gewichtx * 0.7F)) diesen teil könntest in ne eigene funktion ausgliedern, dann könntest dir das if/else sparen

    AlkWert = Geschlechtx.Equals("männlich") ? GetAlkWert(Mengex,Gewichtx,0.7F) : GetAlkWert(Mengex,Gewichtx,0.8F);

    etc

    edit: habs mal kurz probiert:

    Code
    this.comboBox1.Items.AddRange(new object[] {
    														   "0.9",
    														   "0.8",
    														   "0.7",
    														   "500.0"});

    dann kann ich es hier locker auslesen:

    Code
    float f = Convert.ToSingle(this.comboBox1.SelectedItem);

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!