代码之家  ›  专栏  ›  技术社区  ›  James

将任何货币字符串转换为双精度

  •  36
  • James  · 技术社区  · 14 年前

    我的想法是将所有的值从它们的货币格式转换成标准的double并存储起来。然后在显示时根据区域性信息重新格式化。然而,我试过做一些类似的事情。

    var cultureInfo = new System.Globalization.CultureInfo("en-US");
    double plain = return Double.Parse("$20,000.00", cultureInfo);
    

    FormatException . 即使去掉货币符号,仅仅根据数字来做同样的事情。这只是一个例子,我想支持几乎任何类型的货币。

    有没有一个标准的方法来剥离货币并获得双倍的价值?

    3 回复  |  直到 14 年前
        1
  •  105
  •   Hans Olsson    13 年前

    我认为这应该管用:

    double.Parse(currencyValue, NumberStyles.Currency);
    

    在这里你可以看到更多关于 NumberStyles

    double 不是个好主意,最好用 decimal 相反。

        2
  •  23
  •   Chris Taylor    14 年前

    Decimal.Parse("$20,000.00", NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, new CultureInfo("en-US"));
    

    其他一些东西,对于货币我建议你用十进制。这可能有点离谱,但最好将货币数据作为Money存储在DB中,并添加一个货币代码来标识值的货币。

        3
  •  1
  •   hogarth45    6 年前

    也可以使用tryparse()

    string input = "$2,000.00";
    double parsed = 0d;
    double.TryParse(input, NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, CultureInfo.CurrentCulture, out parsed))