C# float.Parse String
Solution 1
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);
Solution 2
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);
}
TMachna
Updated on July 09, 2022Comments
-
TMachna almost 2 years
I'm 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?
-
Edward over 7 yearsAh I was going to suggest the Split but was think more of a float[] as the output so no need for any loops.
float[] temp = float.Parse(tempLine.Split() );
-
Edward over 7 yearssorry this works
float[] temp = tempLine.Split().Select(x => float.Parse(x)).ToArray();