C#将逗号分隔的字符串转换为数字

时间:2019-03-05 11:03:56

标签: c# string double

所以我有以下输入:Call<JsonElement> register(@Body HashMap registerApiPayload);

此函数返回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+");

4 个答案:

答案 0 :(得分:2)

您也可以这样做

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

在美国“。”是逗号分隔符。因此它将正确解析文本。

如果将文化设置为“ de-DE” 3,则表示转换为“,”是逗号分隔符。

但是,您的正则表达式将始终为您提供3,因为它只与[0-9]+正则表达式匹配,而不在乎您的区域性设置。如果您想让正则表达式与您的号码匹配,则必须使用类似

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

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

答案 1 :(得分:1)

IFormatProvider中使用decimal.Parse

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

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

答案 2 :(得分:0)

尝试一下

var culture = new CultureInfo("en-US");
            culture.NumberFormat.NumberDecimalSeparator = ",";
            culture.NumberFormat.NumberGroupSeparator = ".";
            decimal amount = 0;
            if (!decimal.TryParse("3,000,000.12", NumberStyles.Any, culture, out amount))
            {

... }

答案 3 :(得分:-1)

您要除以100,所以您的人数不会是300万...这是解决方案:

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;
    }
  }