下面列出的方案的最佳做法是什么?
我们有一个应用程序,我们想支持多种货币。该软件将尊重用户区域设置和区域设置,以指定正确的数字格式,即$ 10,000.00或10.000,00₴等。
然而,我们希望能够根据货币ID(可能是三个字母的ISO4217代码)格式化不同的数字。我们的想法是使用每种货币在数据库中存储一个表,然后请求用户选择将使用的货币符号。然后,程序将根据区域设置/区域设置格式化所有数字,但将使用我们程序中定义的货币符号。
因此,给出以下价值和货币
10000澳元
5989.34美元
450欧元
程序将输出
$ 10,000.00
$ 5,989.34
€450.00
或使用区域设置将数字格式化为#####,## $结果将是;
10000,00 $
5989,34 $
450,00€
尊重区域设置/区域编号格式但显示不同的货币,最佳做法是什么?
我希望这是有道理的。
使用的技术是c#.NET 2.0。
答案 0 :(得分:7)
我认为这个Q对于你应该做什么是一个非常明确的答案
SO - Proper currency format when not displaying the native currency of a culture
这个Q在C#中如何做到这一点有一个很好的答案
答案 1 :(得分:3)
听起来您可以处理格式化数据的最佳做法。如果我是你,我会更少担心技术上的标准,但更多地关注用户习惯的内容。
如果您在用户对不同货币相当精明的市场中运营,那么与拥有更多单一文化用户的情况完全不同。根据具体情况,您需要以不同的方式设计界面。
此外,如果您要求任何货币显示任何区域设置,ISO4217标准是您最好的选择。这是世界各地的货币兑换商店,货币兑换,发票等所显示的内容。否则,显示货币符号可能会让某些用户感到困惑,而符号本身并不表示该金额实际是什么货币。
我还会参考以下SO问题。并非所有这些都与您的问题直接相关,但他们对支持多种货币所涉及的问题进行了非常好的元讨论。
答案 2 :(得分:1)
您可以存储每种货币代码的文化字符串,而不是仅存储货币符号,因此AUD - >烯AU
CultureInfo ci = new CultureInfo("en-AU");
currencyValue.ToString( "c", ci );
我不确定可用的格式有多大的灵活性。
不确定这是否有帮助:
答案 3 :(得分:0)
您可以将货币值存储为小数,然后在UI上附加货币符号。
Fowler在Patterns of Enterprise Application Architecture中讨论了资金模式:http://www.martinfowler.com/eaaCatalog/money.html
答案 4 :(得分:0)
我遇到了类似的情况。我找到了一种方法,不知道它对你有多大用处。但它解决了我的问题。我为每个地点设置了一个会话字符串,如Session [“cur”] =“0.000”或“0.00”,用于每次登录验证。无论货币进入系统,我都使用.ToString [Session [“cur”]。ToString()]到模型变量。它为我做了伎俩。希望它也能帮到你。