Je suis nouveau en C # et j'ai besoin de lire float
valeurs (x, y, z)
du fichier. On dirait:
0 -0,01 -0,002
0,000833333333333 -0,01 -0,002
Si j'essaye
float number = float.Parse("0,54"); // it works well, but
float number = float.Parse("0.54"); // gains exepction.
Mon code pour lire les valeurs de chaque ligne (peut être buggé):
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);
}
}
Quelqu'un pourrait aider?
méthode float.Parse(string)
utilise vos paramètres de culture actuels par défaut. On dirait que votre CurrentCulture
est NumberDecimalSeparator
propriété est ,
Pas .
C'est pourquoi vous obtenez FormatException
dans votre exemple "0.54"
.
Comme solution, vous pouvez utiliser une culture ayant .
Comme NumberDecimalSeparator
comme InvariantCulture
comme deuxième paramètre dans la méthode Parse
, ou vous pouvez .Clone()
votre CurrentCulture
et définissez sa propriété NumberDecimalSeparator
sur .
float number = float.Parse("0.54", CultureInfo.InvariantCulture);
ou
var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ".";
float number = float.Parse("0.54", culture);
Il semble que votre culture utilise comma
comme séparateur décimal. Essayez de l'analyser avec InvariantCulture
var value = float.Parse(tempLine.Substring(begin, end), CultureInfo.InvariantCulture);
En plus de cela, la façon dont vous analysez les lignes est plus compliquée qu'elle ne devrait. Vous pouvez simplement diviser la ligne au lieu d'essayer de gérer les indices:
foreach(var str in tempLine.Split())
{
float value = float.Parse(str, CultureInfo.InvariantCulture);
}