Tja... C# denkt, intelligent zu sein und akzeptiert, je nach Region, das Komma statt dem Punkt. Das sieht bei mir zum Beispiel folgendermaßen aus:
string stringGerman = "3,1415926";
string stringEnglish = "3.1415926";
double doubleGerman = Convert.ToDouble(stringGerman);
double doubleEnglish = Convert.ToDouble(stringEnglish);
System.Console.Write("{0} - {1}\n", doubleGerman, doubleEnglish);
Die Ausgabe ist: 3,1415926 - 31415926, er akzeptiert also den Punkt nicht. Dies hat schon öfters zu Verwirrung geführt, da man ja instinktiv Zahlen mit Punkt eingibt (wenn sie als Usereingabe zuerst ein string sind). Die Lösung ist zum Glück ziemlich simpel:
double doubleEnglish = Convert.ToDouble(stringEnglish, CultureInfo.InvariantCulture);
Damit sagt man dem Compiler, dass er die Schreibweise mit Punkt akzeptieren soll. Fügt man das bei beiden
Convert.ToDouble()
ein, so liest er den englischen string richtig (und den deutschen natürlich falsch).Damit wäre die Richtung von string zu double also erledigt. Kommen wir zur Rückrichtung. Bei mir liefert eine
.ToString()
-Methode immer die Komma-Schreibweise. Will ich also Daten für Gnuplot oder ähnliches mit C# abspeichern, so klappt das nicht. Die Lösung ist hier aber auch ziemlich simpel. Man muss einfach der .ToString()
-Methode den selben CultureInfo-Parameter übergeben wie der Convert.ToDouble()
-Methode:string numberEnglish = doubleVariable.ToString(CultureInfo.InvariantCulture);
Oh mein Gott hätte ich bei der Klasse CultureInfo doch nur mal weiter gelesen, habe mir eine Methode für eine Xamarin.Forms Android Taschenrechner_App geschrieben und zwar so :
AntwortenLöschenprivate void cultureInfoMethod(string oPer)
{
culturePruefung = zahl + " " + calc + " " + lab_rOperation.Text;
if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToString() == "de")
{
splitCultPruef = culturePruefung.Replace('.', ',').Split(' ');
}
else
if (CultureInfo.CurrentCulture.TwoLetterISOLanguageName.ToString() == "en")
{
splitCultPruef = culturePruefung.Replace(',', '.').Split(' ');
}
if (oPer == "+")
{
ergebnis = Convert.ToDouble(splitCultPruef[0]) + Convert.ToDouble(splitCultPruef[2]);
}
if (oPer == "-")
{
ergebnis = Convert.ToDouble(splitCultPruef[0]) - Convert.ToDouble(splitCultPruef[2]);
}
if (oPer == "*")
{
ergebnis = Convert.ToDouble(splitCultPruef[0]) * Convert.ToDouble(splitCultPruef[2]);
}
if (oPer == "/")
{
ergebnis = Convert.ToDouble(splitCultPruef[0]) / Convert.ToDouble(splitCultPruef[2]);
}
}
Das war wohl sehr umständlich :). Aber nun habe ich wieder was gelernt, Danke.