C# double.parse laenderunabhaengig

palaber

Captain
Registriert
Juni 2006
Beiträge
3.856
Hi Leute,

und zwar habe ich folgendes Problem. Ich bekomme ein Array mit strings geliefert. diese moechte ich in double Werte parsen. Um es einfacher zu halten geh ich jetzt nur noch auf das 1. Arrayelement - also string[0] ein.

Die Sache ist die, ich programmiere an einem System mit deutschen einstellungen / OS.
Das Programm soll spaeter auf einem us System laufen.

Am liebsten waere es mir, wenn mein Code unabhaengig von den Laendereinstellungen laeuft. Der String hat immer das Format: (24 Char: -9.242342340000E+1)

Momentan habe ich es so geloest:

Code:
arrStringNAData[0] = arr StromgMAData[0].Replace('.', ',');
arrDoubleNAData[0] = double.Parse(arrStringNAData[0]);

Fuer das US System muesste ich ja aber die erste Zeile des Codes wieder raus nehmen. Gibt es irgendwie ne moeglichkeit mit System.Globalisation.NumberStyles oder IFormatProvider das ganze zu umgehen?

Muss ich dann den String, den ich von einem Network Analyzer bekomm auch Laenderunabhaengig einlesen? Oder kann ich einfach durch die Laendereinstellungen sagen, dass ein Komma oder Punkt als Trennzeichen dient.

Bei der Globalisation sache bekomm ich immer eine Fehlermeldung. Und die IFormatProvider blick ich nicht wirklich. Woher bekomme ich denn da das Objekt (ist das objekt die Laendereinstellung)?

Code fuer Globalisation (geht nicht):
Code:
arrDoubleNAData[0] = double.Parse(arrStringNAData[0], Szstem.Globalization.NumberStyles.float);

Die MSDN Seite macht mich leider auch nicht schlauer und ein paar Loesungen von google raff ich gerade auch nicht :(.

Vielen Dank fuer eure Hilfe!
 
So sollte es funktionieren:
Code:
Double.Parse("string", System.Globalization.CultureInfo.CurrentCulture.NumberFormat);

Statt der CurrentCulture kannst du ja eine US-Culture abrufen, falls du immer US-Format erwartest.

Z. B. so:
Code:
Double.Parse("string", System.Globalization.CultureInfo.GetCultureInfo("en-us").NumberFormat);
 
Zuletzt bearbeitet:
Code:
 Double.Parse("string", System.Globalization.CultureInfo.CurrentCulture.NumberFormat);

Sollte dir die Culture zurückgeben unter der die Application läuft. Welche unter der Culture laufen sollte in der das OS läuft.
 
darkarchon schrieb:
Ich denke du suchst die CultureInfo von "InvariantCulture" damit immer nur "." verwendet werden um Doubles zu parsen. Hatte dasselbe Problem bei mir… könnte daheim nochmal nachsehen.

Genau so ;)

Code:
double.Parse( @string, NumberStyles.Float, CultureInfo.InvariantCulture );
 
Zurück
Oben