将货币格式设置为字符串时指定货币
本文关键字:货币 字符串 格式 设置 | 更新日期: 2023-09-27 18:11:26
我想将带有关联货币的数字格式化为特定于语言环境的字符串。标准的.ToString("C", CultureInfo.CreateSpecificCulture("xxx"))
会产生错误的输出,因为它使用的是区域设置的货币,而不是该值实际表示的货币。
我正在寻找一种方法来做什么JQuery Globalize做,但在c#(见这里,相关表下)
<>之前语言环境-----------------------------------------三字母货币代码| en(英文)| de(德文)| zh(中文)---------------------- | ------------ | ----------- | ------------美元| $1.00 | 1,00 $ | us $1.00欧元/1.00欧元/1.00欧元人民币| cn¥1.00 | 1,00 cn¥¥1.00日元|¥1 | 1¥| jp¥1英镑| 1.00英镑| 1.00英镑r $1.00 | 1,00 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公共语言环境数据存储库(Unicode Common Locale Data Repository, CLDR)获得额外的货币信息。