AW: String to Double Fehler
Du berücksichtigst nicht, dass Windows Phone per Default die eingestellte System-Culture berücksichtigt. Dadurch ist dann bei Einstellung Deutsch wahrscheinlich das Komma und nicht der Punkt das Dezimaltrennzeichen. Man kann aber z.B. bei Double.Parse in einer Überladung eine bestimmte Culture mitgeben (z.B. en-US) und dann klappts auch mit der Dezimalen.
AW: String to Double Fehler
Hallo,
so einfach es sich anhört, es ist doch recht aufwendig alles abzudecken.
Beispiel:
- Systemeinstellung deutsch: 123.456,789
- Systemeinstellung amerikanisch: 123,456.789
diese Zahlen würde parse erkennen
- Bildschirmtastatur für simple Zahleneingabe ist aber nur für amerikanische Eingaben geeignet 123456.789, das Komma fehlt!
- hat aber jemand in Deutschland ein Handy mit Tastatur gibt er die Zahl in deutscher Version ein 123456,789 oder 123.456,789
Nun wird es kompliziert. Was bedeutet 456.789 oder auch 456,789?
4 Hundert... oder 4 Hunderttausend...
Und geht der Spaß mit anderen Sprachen noch weiter?
Für die meisten Fälle wirst du mit dem Tipp von StevieBallz ganz gut fahren, aber es ist eben lange nicht alles abgedeckt.
Amerikanische Programme stürzen deswegen mit deutschen Systemeinstellungen oft ab, weil die das nie testen
Grüße
Hanno
AW: String to Double Fehler
Stimmt es liegt an der Systemeinstellung. Wenn wenn ich bei meiner Konfiguration (Deutsch) ein Komma einfüge läuft es, wenn ein Punkt dahinkommt stürzt die App ab. Mit der amerikanischen Konfiguration ist es genau anders herum! Gut zu wissen
Danke euch
-Schledi
AW: String to Double Fehler
kannst du nicht einfach über CulturInfo.NumberFormat das Problem umschiffen?
AW: String to Double Fehler
nicht os einfach, weil es sich um eine Benutzereingabe handelt. Und wer weis schon was der tut
AW: String to Double Fehler
Versuche doch mit Tryparse das ganze mit Systemeinstellungen zu parsen. Falls das false zurückgibt einfach nochmal im englischen Format probieren.
Edit: Etwa so
Code:
public static bool TryParseCulture(string str, out double dbl)
{
if (double.TryParse(str, out dbl))
return true;
else
{
NumberStyles style = NumberStyles.Number;
CultureInfo info = CultureInfo.CreateSpecificCulture("en-US");
return double.TryParse(str, style, info, out dbl);
}
}
AW: String to Double Fehler
^[\-]{0,1}[0-9]+[\.\,]{0,1}[0-9]*$
müsste dann der passende Ausdruck sein. Die double.TryParse Methode finde ich allerdings besser geeignet. Sie ist genau für sowas gemacht
AW: String to Double Fehler
Danke für das Beispiel mit dem Code, hatte beim schreiben gerade mal wieder kein Visual Studio um das auszuprobieren. Bei Benutzereingaben ist das Verwenden der aktuellen Systemeinstellung meistens eine gute Idee. Das Problem ist, dass die meisten nicht daran denken wenn sie Config-Files auslesen und dann geht es in anderen Ländern nicht.
Gerade bei Systemsettings schreibe ich deshalb meisten mit dem Punkt als Dezimaltrennzeichen und parse das ganze dann mit der InvariantCulture.