按货币获取文化

本文关键字:文化 获取 货币 | 更新日期: 2023-09-27 17:51:13

嗯。。。我在网上搜索,发现了许多其他方式的解决方案,但没有一个。

我有一个应用程序,用户可以获得不同的货币。我不知道以前的货币,它可能是一切(俄罗斯卢布,美元,欧元,日元…(

我需要将金额转换为十进制,为此我需要当前的文化。我目前的解决方案非常糟糕(而且不完整,因为我不能以这种方式覆盖所有文化(,它只是检查货币符号。

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

有没有可能在货币符号的基础上获得文化。另一件可能很困难的事情是,我不知道货币符号是在金额之前还是超过金额(根据文化的不同而变化。例如:$45.00<->45.00€(

按货币获取文化

创建一次查找并使用它进行快速访问。请注意,一个特定的货币符号可能被多种文化使用:

ILookup<string, CultureInfo> cultureByCurrency = 
    CultureInfo.GetCultures(CultureTypes.AllCultures)
    .ToLookup(_ => _.NumberFormat.CurrencySymbol);

然后查找$,例如:

IEnumerable<CultureInfo> culturesThatUseDollar = cultureByCurrency["$"];

从货币代码或符号到区域性没有精确的映射。考虑一些基本的例子,比如欧元(€(,它在18个国家被用作官方货币。这一事实引发了许多问题,比如符号是放在值之前还是之后等。你应该询问用户要使用的具体格式,而不是试图从货币符号中推断出来。

此外,单个货币符号用于多种货币。假设$可以表示美元、加元、澳元和其他自称为"美元"的货币。如果您想要一种货币的精确规格,您应该使用货币代码。

这是不可能的。

EUR例如将映射到de-DE, fr-FR, nl-NL和其他国家/地区。

没有从货币到文化的映射,因为多个国家/地区共享货币

在您的else-if块中,在找到$后,您将分配哪个区域性?在美国?fr CA?

我建议采取一种不同的方法来消除任何歧义。让用户在输入这段代码之前指定他们的国籍。考虑将区域性信息提供给您,而不是试图猜测。

return CultureInfo.GetCultures(CultureTypes.AllCultures).Where(c => c.NumberFormat.CurrencySymbol.Equals("$"));