如何只解析字符串中的浮点数?

时间:2014-09-15 05:52:39

标签: c# .net winforms

foreach (object item in listBox1.SelectedItems)
{
    string curItem = item.ToString();
    var parts = curItem.Split("{}XY=, ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
    var xCoord = float.Parse(parts[0]);
    var yCoord = float.Parse(parts[1]);
    var point = new PointF(xCoord, yCoord);
    CloudEnteringAlert.pointtocolor.Add(point);
    pictureBox1.Invalidate();
}

curItem变量包含如下值:Cloud detected at: 0.9174312 Kilometers from the coast.

我想从值中仅获取 0.9174312 并设置为变量xCoord。 问题是它现在正在进行解析的方式我遇到了错误:

Input string was not in a correct format

我想这个指数不应该为零。如何才能从字符串中获取浮点数?

现在这个字符串格式每次都是相同的:

第一部分: Cloud detected at: Second part: 0.9174312 and Last part: Kilometers from the coast.

但是将来我可能会改变字符串格式,所以我需要在任何地方浮点数最后一个或字符串的开头只得到浮点数。

3 个答案:

答案 0 :(得分:3)

您可以使用正则表达式从字符串中提取浮点数:

string xCoord = Regex.Match(curItem, @"[-+]?[0-9]*\.?[0-9]+").Groups[1].Value;

之后,您可以将其解析为浮点数。

有关正则表达式的更多信息可以在here找到,或者您可以查看MSDN上的Regex class页面。

答案 1 :(得分:2)

考虑使用正则表达式。

var match = Regex.Match(val, @"([-+]?[0-9]*\.?[0-9]+)");
if (match.Success)
  xCoord = Convert.ToSingle(match.Groups[1].Value);

答案 2 :(得分:2)

试试这个

 foreach (object item in listBox1.SelectedItems)
        {
            string curItem = item.ToString();
            var parts = curItem.Split("{}XY=, ".ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            var xCoord = CultureCheck(parts[0]);
            var yCoord = CultureCheck(parts[1]);
            var point = new PointF(xCoord, yCoord);
            CloudEnteringAlert.pointtocolor.Add(point);
            pictureBox1.Invalidate();
        }       


    private double CultureCheck(string input)
    {
        CultureInfo ci = (CultureInfo)CultureInfo.CurrentCulture.Clone();
        ci.NumberFormat.CurrencyDecimalSeparator = ".";
       return double.Parse(input, NumberStyles.Any, ci);
    }