【问题标题】:How to parse string to decimal with currency symbol?如何使用货币符号将字符串解析为十进制?
【发布时间】:2012-12-02 10:36:14
【问题描述】:

我不知道为什么这不起作用:

string s = "12,00 €";
var germanCulture = CultureInfo.CreateSpecificCulture("de-DE");
decimal d;
if (decimal.TryParse(s, NumberStyles.AllowCurrencySymbol, germanCulture, out d))
{
    // i want to get to this point
    Console.WriteLine("Decimal value: {0}", d);
}

【问题讨论】:

    标签: c# .net string type-conversion globalization


    【解决方案1】:

    使用NumberStyles.Currency 而不是NumberStyles.AllowCurrencySymbol

    if (decimal.TryParse(s, NumberStyles.Currency, germanCulture, out d))
    

    您的代码输出将是:

    Decimal value: 12.00
    

    【讨论】:

    • 更多信息来解释为什么会这样:NumberStyles.AllowCurrencySymbol 只允许在解析过程中忽略货币符号。额外的空格和小数分隔符需要额外的标志来启用它们:AllowDecimalPoint 和 AllowTrailingWhite。 Currency 结合了这些标志(以及其他一些标志)link
    【解决方案2】:

    试试这个;

     string.Format(new CultureInfo("en-SG", false), "{0:c0}", 123423.083234);
    

    它将 123423.083234 转换为 $1,23,423 格式。

    【讨论】:

    • 我需要将包含货币符号的字符串解析为十进制。您正在将给定的小数转换为字符串。所以这是一个不同的要求。但是,它已经得到了回答。
    【解决方案3】:

    请注意,很遗憾,这不适用于比特币符号和其他加密货币符号。两种方法我都试过了。

    Sharplab 证明:link

    在我的情况下(我有一个减号,后跟比特币 ฿ 符号)的解决方法是 字符串上的 .Where() 忽略除数字和减号之外的所有内容...但是如果您想要进行一般验证...那么您将不得不在某处硬编码这些比特币等符号

    【讨论】:

      猜你喜欢
      • 2012-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-09
      • 1970-01-01
      • 2018-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多