按货币获取文化
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 forSingle
:“返回序列的唯一元素,如果序列中不完全有一个元素,则抛出异常。”以上是关于按货币获取文化的主要内容,如果未能解决你的问题,请参考以下文章
为啥 C# decimal ToString 不请求文化和货币?
JavaScript:使用 .NET String.Format() 之类的文化格式化数字/货币?