Ошибка при преобразовании строки в число с плавающей точкой - PullRequest
0 голосов
/ 10 ноября 2009

У меня есть вопрос новичка о конверсии.

string Descript1 = ":1:2:3:4:5";
Regex pattern = new Regex("(:)");

foreach (string sub in pattern.Split(Descript1))
{
    if (sub != ":")
    {
        float a = Convert.ToSingle(sub);
    }
}

Но этот код продолжает выдавать ошибку: «строка была не в правильном формате.»

Кто-нибудь может мне помочь?

Спасибо.

Ответы [ 6 ]

7 голосов
/ 10 ноября 2009

Первым результатом разбиения является пустая строка, то есть то, что находится перед первым двоеточием в строке.

Пропускать пустые строки вместо пропуска ":" (поскольку это никогда не появится в результате):

string Descript1 = ":1:2:3:4:5";
Regex pattern = new Regex(":");

foreach (string sub in pattern.Split(Descript1)) {
  if (sub.Length > 0) {
    Single a = Convert.ToSingle(sub);
  }
}
2 голосов
/ 10 ноября 2009

Я предполагаю, что ваш массив будет начинаться с пустой строки (из-за: в начале вашей строки). Первый шаг - использовать отладчик, чтобы выяснить, содержит ли массив то, что, по вашему мнению, он содержит.

2 голосов
/ 10 ноября 2009

Вам не нужен шаблон регулярных выражений. Метод Split имеет перегрузку, которая принимает ваш разделитель в виде строки.

Сделайте console.writeline (или точку останова) и убедитесь, что вы получаете строку, которая имеет смысл для преобразования.

0 голосов
/ 10 ноября 2009

Regex.Split возвращает пустую строку в начале вашего массива (возвращается из Pattern.Split)

Измените его на следующее, и оно должно работать:

string Descript1 = ":1:2:3:4:5";
Regex pattern = new Regex("(:)");

foreach (string sub in pattern.Split(Descript1))
{
    if (sub != ":" && sub != string.Empty)
    {

        float a = float.Parse(sub);
    }
}
0 голосов
/ 10 ноября 2009

Попробуйте это:

string description = ":1:2:3:4:5";
var floats = from part in description.Split(new char[] { ':' }, StringSplitOptions.RemoveEmptyEntries)
             select float.Parse(part);
foreach (var f in floats)
{
    Console.WriteLine(f);
}
0 голосов
/ 10 ноября 2009
if (sub != ":" && sub!="")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...