将货币格式化为字符串时指定货币
问题描述:
我想将具有关联货币的数字格式化为特定于区域设置的字符串。标准.ToString("C", CultureInfo.CreateSpecificCulture("xxx"))
产生错误的输出,因为它使用语言环境的货币而不是该值实际表示的货币。将货币格式化为字符串时指定货币
我正在寻找一个方式做什么的JQuery Globalize的做法,但在C#中(见here,relavent见下表)
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
答
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)获得额外的货币信息。
你的代码例如'1.ToString(“C”,System.Globalization.CultureInfo.CreateSpecificCulture(“fr-FR”))'产生100欧元的输出,而“en-US”产生1.00美元的结果 你到底在想什么? – GauravKP
我有1美元。我想为它的区域设置fr-FR进行格式化。 '1.ToString(“C”,CultureInfo.CreateSpecificCulture(“fr-F R”))'给出“100欧元”,这是错误的货币。我想获得“1,00 $” – flipchart
了解,这将有助于https://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.numberdecimalseparator(v=vs.110).aspx – GauravKP