将字符串通用解析为float

Vla*_*hev 5 c# floating-point parsing

在我的程序将要运行的环境中,人们使用','和'.' 在具有','和'.'的PC上随机显示小数分隔符 分隔符.

你将如何实现这样的floatparse(字符串)函数?

我试过这个:

    try
    {
        d = float.Parse(s);
    }
    catch
    {
        try
        {
            d = float.Parse(s.Replace(".", ","));
        }
        catch
        {
            d = float.Parse(s.Replace(",", "."));
        }
    }
Run Code Online (Sandbox Code Playgroud)

它不起作用.当我调试它时,它第一次想到"."就会错误地解析它.是数千的分隔符(如100.000.000,0).

我是C#的noob,所以希望那里有更简单的解决方案:-)

注意:人们将同时使用'.' 和','在具有不同分隔符设置的PC中.

Hen*_*man 10

如果您确定没有人使用千位分隔符,您可以先替换:

string s = "1,23";  // or s = "1.23";

s = s.Replace(',', '.');
double d = double.Parse(s, CultureInfo.InvariantCulture);
Run Code Online (Sandbox Code Playgroud)

一般模式是:

  • 首先尝试消毒和规范化.喜欢Replace(otherChar,myChar).
  • 尝试检测格式,可能使用RegEx,并使用目标转换.像计数一样.并且,猜测是否使用了千位分隔符.
  • 使用TryParse按顺序尝试几种格式.千万不能使用这个例外.