Iam new in C# and need to read float
values (x, y, z)
from file.
It looks like:
0 -0.01 -0.002
0.000833333333333 -0.01 -0.002
If Iam trying
float number = float.Parse("0,54"); // it works well, but
float number = float.Parse("0.54"); // gains exepction.
My code for reading values from each line (could be bugged):
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);
}
}
someone could help ?
float.Parse(string)
method uses your current culture settings by default. Looks like your CurrentCulture
's NumberDecimalSeparator
property is ,
not .
That's why you get FormatException
in your "0.54"
example.
As a solution, you can use a culture have .
as a NumberDecimalSeparator
like InvariantCulture
as a second parameter in Parse
method, or you can .Clone()
your CurrentCulture
and set it's NumberDecimalSeparator
property to .
float number = float.Parse("0.54", CultureInfo.InvariantCulture);
or
var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ".";
float number = float.Parse("0.54", culture);
It seems your culture uses comma
as the decimal separator. Try parsing it with InvariantCulture
var value = float.Parse(tempLine.Substring(begin, end), CultureInfo.InvariantCulture);
In addition to this, the way you parsing the lines is more complicated than it should. You can just split the line instead of trying to deal with indices:
foreach(var str in tempLine.Split())
{
float value = float.Parse(str, CultureInfo.InvariantCulture);
}