c# - 将字符串通用解析为 float

标签 c# parsing floating-point

在我的程序要运行的环境中,人们使用“,”和“.”。作为带有“,”和“。”的PC上随机的小数点分隔符分隔符。

你会如何实现这样一个 floatparse(string) 函数?

我试过这个:

    try
    {
        d = float.Parse(s);
    }
    catch
    {
        try
        {
            d = float.Parse(s.Replace(".", ","));
        }
        catch
        {
            d = float.Parse(s.Replace(",", "."));
        }
    }

这是行不通的。当我调试时发现它在第一次想到“。”时解析错误。是千位分隔符(如 100.000.000,0)。

我是 C# 的新手,所以希望没有那么复杂的解决方案:-)

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

最佳答案

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

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

s = s.Replace(',', '.');
double d = double.Parse(s, CultureInfo.InvariantCulture);

一般模式是:

  • 首先尝试净化和规范化。比如 Replace(otherChar, myChar)。
  • 尝试检测一种格式,可能使用 RegEx,并使用有针对性的转换。喜欢数数。和 , 猜测是否使用了千位分隔符。
  • 使用 TryParse 按顺序尝试几种格式。 不要为此使用异常(exception)。

关于c# - 将字符串通用解析为 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3205522/

相关文章:

c# - 使用 DbSet 应用 OrderBy

c++ - "double"的操作和 C 中的优化

ruby - Ruby 中的浮点整数

php - ffmpeg 进度条 - PHP 中的编码百分比

python - 解析 CS :GO script file in Python

html - Ruby Mechanize - 如何在 Mechanize 解析站点响​​应之前解析它?

c++ - "min to max"均匀实数分布会产生 Inf、-Inf 还是 NaN?

c# - 支持对象删除状态的 DTO 的 BindingList

c# - 使用 LINQ 获取字典中 ID 所在的所有结果

c# - 设置捕获设备EmguCV