按货币获取文化

Posted

技术标签:

【中文标题】按货币获取文化【英文标题】:Get Culture by currency 【发布时间】:2014-03-20 12:23:46 【问题描述】:

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

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

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

if (currency.Contains("zł"))

    cult = CultureInfo.GetCultureInfo("PL-pl")

else if (currency.Contains("$"))

    //blah blah blah

是否有可能根据货币符号获得文化。另一个可能很困难的事情是,我不知道货币符号是在金额之前还是之后(因文化而异,即:$45.00 45.00€)

【问题讨论】:

您希望这能以€ 的价格获得什么回报? 只是一个小数(在我的示例中,两者都是 45.00)。我只需要将值转换为小数以供进一步使用 【参考方案1】:

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

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

然后以$为例:

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

【讨论】:

我将此标记为答案。也许其他人是对的,这不是好的做法,但这很有效。您只需描绘其中一种文化。【参考方案2】:

没有从货币代码或符号到文化的精确映射。考虑基本示例,例如欧元 (€),它在 18 个国家/地区用作官方货币。这个事实会引起很多问题,比如符号是放在值之前还是之后等等。您应该询问用户要使用的具体格式,而不是试图从货币符号中推断出来。

此外,单一货币符号可用于多种货币。考虑到$ 可以同时表示美元、加元、澳元和其他自称为“美元”的货币。如果您需要准确的货币规格,您应该使用货币代码。

【讨论】:

【参考方案3】:

这是不可能的。

例如,

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

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

【讨论】:

【参考方案4】:

在你的 else if 块中,找到 $ 后你会分配哪种文化?美国? fr-CA?

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

【讨论】:

【参考方案5】:
return CultureInfo.GetCultures(CultureTypes.AllCultures).Where(c => c.NumberFormat.CurrencySymbol.Equals("$"));

【讨论】:

MSDN for Single:“返回序列的唯一元素,如果序列中不完全有一个元素,则抛出异常。”

以上是关于按货币获取文化的主要内容,如果未能解决你的问题,请参考以下文章

为啥 C# decimal ToString 不请求文化和货币?

JavaScript:使用 .NET String.Format() 之类的文化格式化数字/货币?

购物车上使用的 ASP.NET 的文化问题

当前文化 - 显示欧元符号 (€) 而不是 EUR 字符串

区块链应用开发--邮币卡数字货币交易系统:邮币卡交易所的改革良药!

多区域项目中特定区域的多文化