C#解析从字符串浮动

时间:2011-05-29 23:49:05

标签: c# parsing floating-point

我正在读取XML文件中的数字。其他数字使用逗号分隔符(0,1111),其他数字使用点(0.1111)。如何解析这些数字,以便最终获得所需的结果?我尝试使用float.Parse(reader.Value, System.Globalization.CultureInfo.InvariantCulture);但它不起作用。例如,我有reader.Value =“0,01119703”并被解析为1119703.0。

3 个答案:

答案 0 :(得分:11)

我不相信可以同时使用两个不同的小数分隔符。我想我会使用Replace()将任何逗号更改为点。

float.Parse(reader.Value.Replace(',', '.'), System.Globalization.CultureInfo.InvariantCulture);

答案 1 :(得分:4)

不确定这是最好的解决方案,但也许您可以依赖一组已知的“自定义”数字格式。例如,您可以声明两种自定义数字格式(从头开始或基于已知格式),例如:

private static readonly NumberFormatInfo DecimalSeparatorFormat = new NumberFormatInfo { NumberDecimalSeparator = ".", NumberGroupSeparator = "," };
private static readonly NumberFormatInfo CommaSeparatorFormat = new NumberFormatInfo { NumberDecimalSeparator = ",", NumberGroupSeparator = "." };

然后尝试通过已知的可接受格式解析数字:

  if (!Single.TryParse(unparsedValue, NumberStyles.Float, DecimalSeparatorFormat, out parsedValue) && !Single.TryParse(unparsedValue, NumberStyles.Float, CommaSeparatorFormat, out parsedValue))
    throw new FormatException("Number format not supported");

这假设您拥有有限数量的已知格式,如果您的输入可以真正存在于任何文化中,那么您可能会找不到合适的解决方案。

使用此方法的一个胜利是,您至少要明确支持您能够支持的格式,而不是依赖于简单的字符串替换(这可能会导致格式无效)。

答案 2 :(得分:2)

XML文件中是否有任何内容可以告诉您正在使用哪种格式?在.NET中没有一种内置方法可以有两个不同的允许小数分隔符。如果没有什么告诉你数字的格式是什么,那么你总是可以检查字符串是否包含句号或逗号,并创建一个NumberFormatInfo作为小数分隔符。当然,如果任何数字的句点或逗号为千位分隔符,则无效。