C# 将货币格式化为字符串时指定货币
我想将带有关联货币的数字格式化为特定于语言环境的字符串。标准的C# 将货币格式化为字符串时指定货币,c#,C#,我想将带有关联货币的数字格式化为特定于语言环境的字符串。标准的.ToString(“C”,CultureInfo.CreateSpecificCulture(“xxx”)产生了错误的输出,因为它使用的是区域设置的货币,而不是该值实际表示的货币 我正在寻找一种方法来实现jqueryglobalize的功能,但是在C#中(请参见下面的相关表格) 场所 ----------------------------------------- 三字母货币代码| en(英语)| de(德语)| zh(中文) -
.ToString(“C”,CultureInfo.CreateSpecificCulture(“xxx”)
产生了错误的输出,因为它使用的是区域设置的货币,而不是该值实际表示的货币
我正在寻找一种方法来实现jqueryglobalize的功能,但是在C#中(请参见下面的相关表格)
场所
-----------------------------------------
三字母货币代码| en(英语)| de(德语)| zh(中文)
---------------------- | ------------ | ----------- | ------------
美元| 1.00 | 1,00 |美元1.00
1.00欧元1,00欧元1.00欧元
人民币1.00元1,00元1.00元
日元1日元1日元
英镑1.00英镑1,00英镑1.00英镑
巴西雷亚尔1.00至1.00雷亚尔1.00雷亚尔
FormatCurrency(1m,“USD”,“de”)
返回“1,00$”
等等,但在任何语言环境中都不会区分CN¥
和JP¥
,或类似的内容。货币符号仍然是其本地语言环境使用的符号。您可以从中获得额外的货币信息。您的代码,例如1.ToString(“C”,System.Globalization.CultureInfo.CreateSpecificCulture(“fr”)
的输出为1,00欧元,“en-US”的结果是1.00美元您到底在尝试什么?我有1美元。我想将其格式化为区域设置fr-fr.1.ToString(“C”,CultureInfo.CreateSpecificCulture(“fr-F”)R”)
给出的“1,00欧元”是错误的货币。我想了解“1,00$”,这将有助于列出预期结果。对于fr,123,46欧元对于c#是正确的。在jquery中可能有所不同,但它是一种不同的语言。这不一定有你想要的文化(老实说,我不确定它是什么),但它确实表明你的结果是预期的行为。
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);
}