嗯......我在网上搜索并找到了其他方法的许多解决方案,但没有这些解决方案。
我有一个应用程序,用户可以获得不同的电流。我不知道以前的货币,它可能是一切(俄罗斯rubels,usd,€,日元......)
我需要将金额转换为小数,因为我需要当前的文化。我目前的解决方案非常糟糕且不完整,导致我无法覆盖所有文化的方式),它只是检查货币符号。
if (currency.Contains("zł"))
{
cult = CultureInfo.GetCultureInfo("PL-pl")
}
else if (currency.Contains("$"))
{
//blah blah blah
}
是否有可能将文化基于货币符号。另一个可能很难的事情是,我不知道货币符号是否在金额之前或之外(按文化变化i.E:$ 45.00< - > 45.00€)
答案 0 :(得分:4)
没有从货币代码或符号到文化的确切映射。考虑像EUR(€)这样的基本例子,它在18个国家被用作官方货币。这个事实引起了许多问题,例如符号是否放在值等之前或之后。您应该询问用户使用的特定格式,而不是尝试从货币符号中推断出它。
此外,单一货币符号用于许多货币。考虑$
可以表示美元,加元,澳元和其他自称为“美元”的货币。如果您想要确切的货币规格,则应使用货币代码。
答案 1 :(得分:4)
创建一次查找并将其用于快速访问。请注意,多种文化可能会使用特定的货币符号:
ILookup<string, CultureInfo> cultureByCurrency =
CultureInfo.GetCultures(CultureTypes.AllCultures)
.ToLookup(_ => _.NumberFormat.CurrencySymbol);
然后查找$
例如:
IEnumerable<CultureInfo> culturesThatUseDollar = cultureByCurrency["$"];
答案 2 :(得分:2)
这是不可能的。
例如, EUR 会映射到de-DE, fr-FR, nl-NL
和其他国家/地区。
没有从货币到文化的映射,因为多个国家/地区共享货币
答案 3 :(得分:1)
return CultureInfo.GetCultures(CultureTypes.AllCultures).Where(c => c.NumberFormat.CurrencySymbol.Equals("$"));
答案 4 :(得分:1)
在你的else if block中,你找到$后会分配哪种文化? EN-US? FR-CA
我建议采用不同的方法来消除任何歧义。让用户在输入此代码块之前指定其国籍。考虑将文化信息提供给您,而不是试图猜测它。