【问题标题】:How to format a money value from an ISOCurrencySymbol in C#如何在 C# 中从 ISOCurrencySymbol 格式化货币值
【发布时间】:2010-04-21 02:14:56
【问题描述】:

我创建了一个 Money 类来保存不同货币的货币价值。该类使用 3 个字母 ISO 符号来存储货币类型:

public class Money
{
    public decimal Amount { get; set; }
    public string Currency { get; set; }
}

在 C# 中有没有办法使用此信息,例如 100.00 USD,并将其格式化为“$100.00”?我知道的唯一方法需要这样的 CultureInfo:

Amount.ToString("C", CultureInfo.CreateSpecificCulture("en-US"));

但是,这不适用于我的 Money 课程。还有其他解决方案吗?我愿意改变我的 Money 课程。

我已经在这个网站上搜索过类似的问题(例如this),但找不到可以回答上述问题的问题。

【问题讨论】:

  • 您能否详细说明“这不适用于我的 Money 类”是什么意思?
  • Money 类不存储 CultureInfo,它只存储货币的 ISO 符号。

标签: c# format currency


【解决方案1】:

这是一个重要的本地化问题。看看这些例子from MSDN

123.456(“C”,en-US)-> 123.46 美元 123.456 ("C", fr-FR) -> 123,46 € 123.456 ("C", ja-JP) -> ¥123

您将如何向法国的某人显示USD 123.456$123.46123,46 $?

我可能会坚持使用 3 个字母的 ISO 符号来显示它,尽管这个符号的位置在不同的国家似乎也有所不同。来自usage guidelines for the EUR symbol

在英文文本中,ISO 代码“EUR”后跟一个固定的空格和金额:

30 欧元的总和

注意:同样的规则适用于爱尔兰语、拉脱维亚语和马耳他语。在所有其他欧盟官方语言中,顺序颠倒;金额后跟一个固定空格和 ISO 代码“EUR”(或图形中的欧元符号):

une somme de 30 欧元

【讨论】:

  • 嗯...,我明白你在说什么。我希望至少有一种方法可以格式化给定本地的所有货币。例如,如果在 en-US 语言环境中运行,USD 将显示为 $100.00,Yen 将显示为 ¥123。
【解决方案2】:

检查这个扩展方法:

public static string FormatCurrency(this decimal amount, string currencyCode)
{
    var culture = (from c in CultureInfo.GetCultures(CultureTypes.SpecificCultures)
            let r = new RegionInfo(c.LCID)
            where r != null
            && r.ISOCurrencySymbol.ToUpper() == currencyCode.ToUpper()
            select c).FirstOrDefault();

    if (culture == null)
        return amount.ToString("0.00");

    return string.Format(culture, "{0:C}", amount);
}

用法:

decimal amount = 100;

amount.FormatCurrency("AUD");  //$100.00
amount.FormatCurrency("GBP");  //£100.00
amount.FormatCurrency("EUR");  //100,00 €
amount.FormatCurrency("VND");  //100,00 ₫
amount.FormatCurrency("IRN");  //₹ 100.00

此代码来自: http://lukencode.com/2012/05/28/quick-and-dirty-csharp-currency-helper/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2012-07-26
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    相关资源
    最近更新 更多