繁体   English   中英

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

[英]How can I parse only the float number from the string?

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.

但是也许将来我会更改字符串格式,所以我需要在任何地方浮点数都将在字符串的最后或中间以仅获取浮点数。

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

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

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

有关正则表达式的更多信息,请参见此处 ,或者您可以查看MSDN的Regex类页面。

考虑使用正则表达式。

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

尝试这个

 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);
    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM