将货币格式设置为字符串时指定货币

本文关键字:货币 字符串 格式 设置 | 更新日期: 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)获得额外的货币信息。