代码之家  ›  专栏  ›  技术社区  ›  Sachin Prasad

将货币232680.00美元转换为十进制[副本]

  •  1
  • Sachin Prasad  · 技术社区  · 9 年前

    获取十进制值的最佳方法是什么 $232,680.00 没有正则表达式是可能的吗。

    同样,这也不起作用-

    decimal.TryParse(Response.assess_market_value, NumberStyles.Currency, CultureInfo.InvariantCulture, out marketTotalValue);
    
    2 回复  |  直到 9 年前
        1
  •  5
  •   Soner Gönül to StackOverflow    9 年前

    你可以结合 AllowCurrencySymbol , AllowDecimalPoint and AllowThousands styles 并使用具有 $ 作为一个 CurrencySymbol 喜欢 en-US

    var s = "$232,680.00";
    decimal d = decimal.Parse(s, NumberStyles.AllowCurrencySymbol |
                                 NumberStyles.AllowDecimalPoint | 
                                 NumberStyles.AllowThousands, 
                                 CultureInfo.GetCultureInfo("en-US"));
    

    或更简单的使用 NumberStyles.Currency 相反,它也包含这些样式。

    decimal d = decimal.Parse(s, NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"));
    

    代码中的问题是 InvariantCulture ¤ (这是货币符号( U+00A4 ))不是 $ 作为一个 货币符号 。如果您更改 不变文化 CultureInfo.GetCultureInfo("en-US") ,您的代码也可以工作。

    英语-美国 文化完全适合你的字符串,因为它 . 作为十进制分隔符和 , 作为千位分隔符。

        2
  •  1
  •   Saeb Amini    9 年前

    关于:

    decimal.Parse("$232,680.00", NumberStyles.Currency, CultureInfo.GetCultureInfo("en-US"))