从字符串中检索货币符号
Retrieve Currency Symbol from a String
我正在尝试从下拉列表中检索一个元素并将其存储在 string
中。我想将 string
货币符号 转换为 货币代码 。以下是我写的代码:
我写了下面的代码,但我收到一条错误消息:
System.Globalization.CultureNotFoundException: Culture is not
supported. Parameter name: name USD - United States dollar is an
invalid culture identifier.
public string RetreiveCurrencySymbolFromCode()
{
string currencycode = " USD-United States Dollars";
string FinalCode = Currencycode1.Split('-')[0];
CultureInfo Symbol = new CultureInfo(FinalCode);
return Symbol.NumberFormat.CurrencySymbol;
}
我希望检索 USD 并将其更改为符号 $
好吧,"USD"
是 货币的名称 (RegionInfo.ISOCurrencySymbol
),而 "en-US"
是 文化 (Culture.Name
)。让我们获取使用 USD
作为货币的 所有文化 :
string FinalCode = "USD";
var result = CultureInfo
.GetCultures(CultureTypes.SpecificCultures)
.Where(culture => new RegionInfo(culture.LCID).ISOCurrencySymbol == FinalCode)
.ToArray();
Console.Write(string.Join(Environment.NewLine, result
.Select(culture => $"{culture.Name,10} : ({culture.NumberFormat.CurrencySymbol}) : {culture.EnglishName}")));
结果:
en-US : ($) : English (United States)
quz-EC : ($) : Quechua (Ecuador)
en-029 : ($) : English (Caribbean)
es-EC : ($) : Spanish (Ecuador)
es-SV : ($) : Spanish (El Salvador)
es-PR : ($) : Spanish (Puerto Rico)
es-US : ($) : Spanish (United States)
如您所见,几种不同的 文化可以使用相同的 货币。从技术上讲,您的代码可以实现为
using System.Text.RegularExpressions;
...
string currencycode = " USD-United States Dollars";
...
// https://en.wikipedia.org/wiki/ISO_4217
// ISO_4217 - all codes are 3 capital letters
string FinalCode = Regex.Match(currencycode, "[A-Z]{3}").Value;
var culture = CultureInfo
.GetCultures(CultureTypes.SpecificCultures)
.Where(culture => new RegionInfo(culture.LCID).ISOCurrencySymbol == FinalCode)
.FirstOrDefault();
if (culture != null)
return culture.NumberFormat.CurrencySymbol;
else
return "???"; // Unknown currency / culture
这里有 2 个问题:
- 货币代码ISO 4217是三个大写字母的组合(例如
USD
、EUR
、RUB
),比较安全方法是 Match
借助正则表达式
- 相同的货币可以被多种文化使用。您可能需要一个额外的规则来缩小所需的区域性
我正在尝试从下拉列表中检索一个元素并将其存储在 string
中。我想将 string
货币符号 转换为 货币代码 。以下是我写的代码:
我写了下面的代码,但我收到一条错误消息:
System.Globalization.CultureNotFoundException: Culture is not supported. Parameter name: name USD - United States dollar is an invalid culture identifier.
public string RetreiveCurrencySymbolFromCode()
{
string currencycode = " USD-United States Dollars";
string FinalCode = Currencycode1.Split('-')[0];
CultureInfo Symbol = new CultureInfo(FinalCode);
return Symbol.NumberFormat.CurrencySymbol;
}
我希望检索 USD 并将其更改为符号 $
好吧,"USD"
是 货币的名称 (RegionInfo.ISOCurrencySymbol
),而 "en-US"
是 文化 (Culture.Name
)。让我们获取使用 USD
作为货币的 所有文化 :
string FinalCode = "USD";
var result = CultureInfo
.GetCultures(CultureTypes.SpecificCultures)
.Where(culture => new RegionInfo(culture.LCID).ISOCurrencySymbol == FinalCode)
.ToArray();
Console.Write(string.Join(Environment.NewLine, result
.Select(culture => $"{culture.Name,10} : ({culture.NumberFormat.CurrencySymbol}) : {culture.EnglishName}")));
结果:
en-US : ($) : English (United States)
quz-EC : ($) : Quechua (Ecuador)
en-029 : ($) : English (Caribbean)
es-EC : ($) : Spanish (Ecuador)
es-SV : ($) : Spanish (El Salvador)
es-PR : ($) : Spanish (Puerto Rico)
es-US : ($) : Spanish (United States)
如您所见,几种不同的 文化可以使用相同的 货币。从技术上讲,您的代码可以实现为
using System.Text.RegularExpressions;
...
string currencycode = " USD-United States Dollars";
...
// https://en.wikipedia.org/wiki/ISO_4217
// ISO_4217 - all codes are 3 capital letters
string FinalCode = Regex.Match(currencycode, "[A-Z]{3}").Value;
var culture = CultureInfo
.GetCultures(CultureTypes.SpecificCultures)
.Where(culture => new RegionInfo(culture.LCID).ISOCurrencySymbol == FinalCode)
.FirstOrDefault();
if (culture != null)
return culture.NumberFormat.CurrencySymbol;
else
return "???"; // Unknown currency / culture
这里有 2 个问题:
- 货币代码ISO 4217是三个大写字母的组合(例如
USD
、EUR
、RUB
),比较安全方法是Match
借助正则表达式 - 相同的货币可以被多种文化使用。您可能需要一个额外的规则来缩小所需的区域性