Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Community
  • |
  • Diskussionsforum
[gelöst] FormatException beim Behandeln und Konvertieren von Währungswerten
MrChangeLog
myCSharp.de - Member

Avatar #avatar-4086.gif


Dabei seit:
Beiträge: 135

Themenstarter:

[gelöst] FormatException beim Behandeln und Konvertieren von Währungswerten

beantworten | zitieren | melden

Ich habe vor einiger Zeit als Übung einen Kaffeautomaten programmiert (mit ASP.Net Webforms (ja ich weiss, ist veraltet)). Da ein (Mit-)Lehrling nun die gleiche Übung machen muss wollte ich mir meinen Automaten nochmal ansehen. Dabei stiess ich auf eine FormatException. Ich verstehe aber nicht, warum diese auftritt. Als ich das Programm das letzte mal verwendet habe lief es problemlos und ich habe seither nichts geändert.

Ich habe dort folgenden Code:


Single Anzahlung = 0;
string labeltext = lblPreis.Text;
Single textboxtext = Convert.ToSingle(TbBezahlt.Text);
char[] eliminator = { ' ' };
string[] preis_solo = labeltext.Split(eliminator);
Single kaffepreis = Convert.ToSingle(preis_solo[0]);

lblPreis.Text kann drei mögliche Werte haben: "CHF 1.50", "CHF 1.80" oder "CHF 2.00".
Dementsprechend ist preis_solo[0] "1.50", 1.80" oder "2.00".

Die Fehlermeldung lautet:
Fehler
In System.FormatException ist eine Ausnahme vom Typ "mscorlib.dll" aufgetreten, doch wurde diese im Benutzercode nicht verarbeitet.

Zusätzliche Informationen: Die Eingabezeichenfolge hat das falsche Format.

Hat jemand ne Idee, wo der Fehler liegt? Ich komme einfach nicht darauf. Ich habe auch schon "kaffepreis" als Double definiert (und dem entsprechend Convert.ToDouble).
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MrChangeLog am .
private Nachricht | Beiträge des Benutzers
LaTino
myCSharp.de - Experte

Avatar #avatar-4122.png


Dabei seit:
Beiträge: 3062
Herkunft: Thüringen

beantworten | zitieren | melden

Liegt daran, dass die Eingabezeichenfolge das falsche Format hat ;).

Oder anders: deine verwendete Kultur Konvertiert Bruchzahlen mit einem Komma. Du hast sie aber in deinen Zeichenfolgen mit Punkt dargestellt. Für die Konvertierung solltest du mitteilen, dass du gern eine Kultur verwenden willst, die einen Punkt als Dezimaltrenner verwendet.


Convert.ToSingle(mystring, CultureInfo.InvariantCulture);

LaTino
EDIT: zu spät gesehn. Was t0ms3n sagt, natürlich m(
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von LaTino am .
"Furlow, is it always about money?"
"Is there anything else? I mean, how much sex can you have?"
"Don't know. I haven't maxed out yet."
(Furlow & Crichton, Farscape)
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16108

beantworten | zitieren | melden

In welcher Zeile bekommst Du den Fehler?
Via Debugging angeschaut, was wirklich in den Variablen steht?

Bei Preisen bzw. Geld sollte man immer mit Decimal arbeiten. Single (float) ist wiederum genau das, was man nicht nehmen sollte.

Edit: Latino wird mit seiner Vermutung sehr wahrscheinlich recht haben.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
t0ms3n
myCSharp.de - Member



Dabei seit:
Beiträge: 319

beantworten | zitieren | melden

Unabhängig davon ist preis_solo[0] nicht der Preis sondern "CHF". Das wird deine Formatexception erklären.
private Nachricht | Beiträge des Benutzers
MrChangeLog
myCSharp.de - Member

Avatar #avatar-4086.gif


Dabei seit:
Beiträge: 135

Themenstarter:

beantworten | zitieren | melden

Danke @LaTino, jetzt funktioniert es.
Ich habe auch eine Vermutung, warum es früher funktionierte:
Als ich das Programm schrieb, arbeitete ich mit der englischen Version vom VisualStudio und dort wird offensichtlich der Punkt als Dezimaltrennzeichen verwendet.
Nun habe ich aber die deutsche Version, bei der eben das Komme der Dezimaltrenner ist.
private Nachricht | Beiträge des Benutzers
MrChangeLog
myCSharp.de - Member

Avatar #avatar-4086.gif


Dabei seit:
Beiträge: 135

Themenstarter:

beantworten | zitieren | melden

Zitat von t0ms3n
Unabhängig davon ist preis_solo[0] nicht der Preis sondern "CHF". Das wird deine Formatexception erklären.

Sorry, habe da was falsch angegeben. Bei lblPreis.Text kommt natürlich erst die Zahl und dann das "CHF"
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von MrChangeLog am .
private Nachricht | Beiträge des Benutzers
MrChangeLog
myCSharp.de - Member

Avatar #avatar-4086.gif


Dabei seit:
Beiträge: 135

Themenstarter:

beantworten | zitieren | melden

PS: @Abt: habe deinen Einwand betreffend dem Datentyp beherzigt und verwende nun Decimal
private Nachricht | Beiträge des Benutzers