С# float.Parse String
Я новичок в С# и мне нужно прочитать float
значения (x, y, z)
из файла.
Это выглядит так:
0 -0.01 -0.002
0.000833333333333 -0.01 -0.002
Если я пытаюсь
float number = float.Parse("0,54"); // it works well, but
float number = float.Parse("0.54"); // gains exepction.
Мой код для чтения значений из каждой строки (может быть ошибка):
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);
}
}
Кто-то может помочь?
Ответы
Ответ 1
float.Parse(string)
метод использует ваши текущие настройки культуры по умолчанию. Похоже, что CurrentCulture
NumberDecimalSeparator
свойство ,
not .
Вот почему вы получаете FormatException
в своем примере "0.54"
.
В качестве решения вы можете использовать культуру .
как NumberDecimalSeparator
как InvariantCulture
как второй параметр в методе Parse
или вы можете .Clone()
ваш CurrentCulture
и установить для него свойство NumberDecimalSeparator
на .
float number = float.Parse("0.54", CultureInfo.InvariantCulture);
или
var culture = (CultureInfo)CultureInfo.CurrentCulture.Clone();
culture.NumberFormat.NumberDecimalSeparator = ".";
float number = float.Parse("0.54", culture);
Ответ 2
Кажется, ваша культура использует comma
как десятичный разделитель. Попробуйте разобрать его с помощью InvariantCulture
var value = float.Parse(tempLine.Substring(begin, end), CultureInfo.InvariantCulture);
В дополнение к этому способ, которым вы разбираете строки, сложнее, чем нужно. Вы можете просто разделить строку вместо того, чтобы пытаться иметь дело с индексами:
foreach(var str in tempLine.Split())
{
float value = float.Parse(str, CultureInfo.InvariantCulture);
}