2014-12-31 23 views
10

Jestem nowy w języku C# i trzeba odczytać float wartości (x, y, z) z pliku. To wygląda następująco:C# float.Parse String

0 -0,01 -0,002

0,000833333333333 -0,01 -0,002

Jeśli Iam próbuje

float number = float.Parse("0,54"); // it works well, but 
float number = float.Parse("0.54"); // gains exepction. 

mojego kodu do odczytu wartości z każdej linii (może być wadliwy):

int begin = 0; 
int end = 0; 
for (int i = 0; i < tempLine.Length; i++) 
{ 
    if (Char.IsWhiteSpace(tempLine.ElementAt(i))) 
    { 
     end = i; 
     float value = float.Parse(tempLine.Substring(begin, end)); 
     begin = end; 
     System.Console.WriteLine(value); 
    } 
} 

ktoś może pomóc?

+0

Chciałbym podzielić ciąg przez przestrzeń i następnie pętli tablicę z 'float.Parse' itp – geedubb

Odpowiedz

15

float.Parse(string) method domyślnie używa bieżących ustawień kultury. Wygląda twoje CurrentCulture „s NumberDecimalSeparator property jest , nie .

Dlatego masz FormatException w przykładzie "0.54".

Jako rozwiązanie, można użyć kultury mają . jako NumberDecimalSeparator jak InvariantCulture jako drugi parametr w Parse metody, można też .Clone() swoją CurrentCulture i ustaw jego NumberDecimalSeparator nieruchomość do .

float number = float.Parse("0.54", CultureInfo.InvariantCulture); 

lub

5

Wygląda na to, że Twoja kultura używa comma jako separatora dziesiętnego lub. Spróbuj analizowania go InvariantCulture

var value = float.Parse(tempLine.Substring(begin, end), CultureInfo.InvariantCulture); 

Poza tym, sposób analizowania wierszy jest bardziej skomplikowana, niż powinno. można po prostu podzielić linię zamiast próbować radzić sobie z indeksów:

foreach(var str in tempLine.Split()) 
{ 
    float value = float.Parse(str, CultureInfo.InvariantCulture); 
} 
+0

Ah miałem zamiar zaproponować Split, ale pomyślał bardziej o float [] jako o wyjściu, więc nie ma potrzeby żadnych pętli. 'float [] temp = float.Parse (tempLine.Split());' – Edward

+0

Przepraszam, że działa 'float [] temp = tempLine.Split(). Wybierz (x => float.Parse (x)).(); ' – Edward