如何从字符串中删除非数字但在C#中保留小数

时间:2018-11-29 04:00:21

标签: c# selenium selenium-webdriver

我在NUnit Framework上使用Selenium(C#),并且从UI中获取的字符串为 $ 4850.19 。 我想将上述字符串与后端(DB)的值进行比较,以断言它们相等。 我正在使用下面的方法从前端解析我的美元金额,但是问题是,这也剥夺了小数点;很明显,与后端的比较失败了。

使用的方法:

 public static string RemoveNonNumeric(string s)
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.Length; i++)
            if (Char.IsNumber(s[i]))
                sb.Append(s[i]);
        return sb.ToString();
    }

如何去除任何“ $”或“,”但保留“。”值吗?

4 个答案:

答案 0 :(得分:5)

对于Reg ex,这是微不足道的

Regex.Replace(s, "[^0-9.]", "")

答案 1 :(得分:2)

您还可以使用decimal.Parse方法将格式化为货币的string解析为decimal类型:

string input = "$4,850.19";
decimal result = decimal.Parse(input, NumberStyles.Currency);

Console.WriteLine($"{input} => {result}");

输出:

enter image description here

答案 2 :(得分:1)

如果不想走decimal.Parse路线,另一种方法是只从字符串中返回数字和'.'字符:

public static string RemoveNonNumeric2(string s)
{
    return string.Concat(s?.Where(c => char.IsNumber(c) || c == '.') ?? "");
}

答案 3 :(得分:0)

感谢上面的所有输入,我现在想出了一种简单的方法来处理此问题(如下所示)-

public static string RemoveNonNumeric(string s)
    {
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.Length; i++)
            if (Char.IsNumber(s[i]) || s[i] == '.')
                sb.Append(s[i]);
        return sb.ToString();
    }

我想尽快尝试其他处理方式。