按货币获取文化

时间:2014-03-20 12:23:46

标签: c# cultureinfo culture

嗯......我在网上搜索并找到了其他方法的许多解决方案,但没有这些解决方案。

我有一个应用程序,用户可以获得不同的电流。我不知道以前的货币,它可能是一切(俄罗斯rubels,usd,€,日元......)

我需要将金额转换为小数,因为我需要当前的文化。我目前的解决方案非常糟糕且不完整,导致我无法覆盖所有文化的方式),它只是检查货币符号。

if (currency.Contains("zł"))
{
    cult = CultureInfo.GetCultureInfo("PL-pl")
}
else if (currency.Contains("$"))
{
    //blah blah blah
}

是否有可能将文化基于货币符号。另一个可能很难的事情是,我不知道货币符号是否在金额之前或之外(按文化变化i.E:$ 45.00< - > 45.00€)

5 个答案:

答案 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

我建议采用不同的方法来消除任何歧义。让用户在输入此代码块之前指定其国籍。考虑将文化信息提供给您,而不是试图猜测它。