我想将具有关联货币的数字格式化为特定于语言环境的字符串。标准.ToString("C", CultureInfo.CreateSpecificCulture("xxx"))
产生错误的输出,因为它使用的是区域设置的货币,而不是该值实际代表的货币。
我正在寻找一种方法来做JQuery Globalize的工作,但在C#中(参见here,下面的相关表)
Locale ----------------------------------------- 3-letter currency code | en (English) | de (German) | zh (Chinese) ---------------------- | ------------ | ----------- | ------------ USD | $1.00 | 1,00 $ | US$ 1.00 EUR | €1.00 | 1,00 € | € 1.00 CNY | CN¥1.00 | 1,00 CN¥ | ¥ 1.00 JPY | ¥1 | 1 ¥ | JP¥ 1 GBP | £1.00 | 1,00 £ | £ 1.00 BRL | R$1.00 | 1,00 R$ | R$ 1.00
答案 0 :(得分:4)
string FormatCurrency(decimal value, string currencyCode, string locale)
{
var culture = CultureInfo.CreateSpecificCulture(locale);
var numberFormat = (NumberFormatInfo) culture.NumberFormat.Clone();
var currencySymbol = CultureInfo.GetCultures(CultureTypes.AllCultures)
.Where(ci => ci!=CultureInfo.InvariantCulture)
.Select(c =>{try{return new RegionInfo(c.LCID);}
catch{return null;}})
.Where(ri=>ri!=null &&
ri.ISOCurrencySymbol==currencyCode)
.Select(ri => ri.CurrencySymbol)
.First();
numberFormat.CurrencySymbol = currencySymbol;
return value.ToString("C",numberFormat);
}
FormatCurrency(1m,"USD","de")
会返回"1,00 $"
等等,但它不会在任何区域设置中区分CN¥
和JP¥
或类似的内容。货币符号仍然是其本机区域设置使用的符号。您可以从Unicode Common Locale Data Repository (CLDR)获取额外的货币信息。