c#将带逗号的字符串转换为数字

问题描述 投票:0回答:3

所以我有这个输入:3,000,000

而这个函数返回30000M

public static decimal? CustomParse(string incomingValue)
{
    decimal val;
    if (!decimal.TryParse(incomingValue.Replace(",", "").Replace(".", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val))
        return null;
    return val / 100;
}

将这种输入转换为numbber的最佳方法是什么?

编辑

我也尝试这个::

Regex regex = new Regex(@"\d+");

输出是3

c# string double
3个回答
2
投票

你也可以这样做

return Decimal.Parse(incomingValue, new CultureInfo("en-US"));

在en-US'。'是逗号分隔符。所以它会正确解析文本。

如果文化被设置为说“de-DE”3将是转换的预期结果为','是逗号分隔符。

然而,你的正则表达式总会给你3,因为它只匹配[0-9]+正则表达式,不关心你的文化设置。如果你想要一个正则表达式匹配你的号码,你必须使用类似的东西

Regex regex = new Regex(@"\d+(,\d+)*");

这将匹配“123”以及“123,123”但不匹配“123”或“123”。 (在女巫的情况下,它将匹配123部分)。


1
投票

IFormatProvider中使用decimal.Parse

var format = new NumberFormatInfo
{
    NumberGroupSeparator = ","
};

decimal res = decimal.Parse("3,000,000", format);

-1
投票

你除以100,所以你的数字不会是3百万......这里的解决方案:

class Program
  {
    static void Main(string[] args)
    {
      decimal? value = CustomParse("3,000,000");
      Console.WriteLine(value);
    }

    public static decimal? CustomParse(string incomingValue)
    {
      decimal val;
      if (!decimal.TryParse(incomingValue.Replace(",", ""), NumberStyles.Number, CultureInfo.InvariantCulture, out val))
        return null;
      return val;
    }
  }
© www.soinside.com 2019 - 2024. All rights reserved.