2016-05-25 19 views
0

Ich habe ein kleines Tool erstellt, das den Text aus einer TXT-Datei liest und verarbeitet.Mono kann String nicht in Double konvertieren

string seconds = null; 
string temp = null; 
double timetaken = 0.0; 

seconds = (File.ReadAllText("file.txt")); 
temp = seconds.Replace('.', ','); 
timetaken = double.Parse(temp); 

jetzt Mein Problem ist, dass es ohne Probleme auf Windows läuft, aber Craches unter Linux mit Mono (himbeer PE2)

Die TXT-Datei immer nur enthält eine Zeile mit 11 Zeichen zum Beispiel: 0.080983088

Ich weiß, dass das Problem double.Parse ist, aber ich weiß nicht, was zu tun ist, habe ich bereits versucht Convert.todouble und double.tryparse, aber es hat nicht geholfen.

error log

+4

Vielleicht ist die Kultur auf dem Linux-Box ist Perioden statt Kommas für Dezimaltrennzeichen? Versuchen Sie, die Periode nicht durch ein Komma zu ersetzen, und verwenden Sie die Invariant-Kultur, wenn Sie 'double.Parse (Sekunden, CultureInfo.InvariantCulture) 'analysieren. – juharr

+0

double.Parse (Sekunden, CultureInfo.InvariantCulture) funktioniert, aber jetzt ändert es "0.080983088" zu "80983088", und es verwendet, und es funktioniert mit einem "," – Synk

+0

Wenn Sie immer noch den Punkt in ein Komma ändern, dann ist es behandle das Komma einfach als Tausendertrennzeichen, das es im Grunde einfach ignoriert. Es muss eine Zeit für die Invariante Kultur sein, um sie als Dezimaltrennzeichen zu erkennen. – juharr

Antwort

0
timetaken = Convert.ToDouble(Convert.ToDecimal(temp)); 

Werke für mich

0

Sie können versuchen:

string value = "3,14"; 
value = value.Replace(",","."); 
double314 = double.Parse(value,System.Globalization.NumberStyles.AllowDecimalPoint); 
+0

double314 = double.Parse (value, System.Globalization.NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture); – VLord75