最佳实践 – 格式化多种货币

下面列出的场景的最佳做法是什么?

我们有一个应用程序,我们想支持多种货币。 该软件将尊重用户的区域设置和区域设置,以指定正确的数字格式,即$ 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。

我认为这个Q是一个非常明确的答案,你应该做什么

SO – 不显示文化的本机货币时的正确货币格式

这个Q有一个很好的答案如何在C#中做到这一点

SO – 货币格式

听起来你已经掌握了格式化数据的最佳实践。 如果我是你,我会更少担心技术上的标准,但更多地关注用户习惯的东西。

如果您在用户对不同货币相当精明的市场中运营,那么与拥有更多单一文化用户的情况完全不同。 根据具体情况,您需要以不同的方式设计界面。

此外,如果您的要求是向任何区域设置显示任何货币, ISO4217标准是您最好的选择。 这是世界各地的货币兑换商店,货币兑换,发票等所显示的内容。否则,显示货币符号可能会使某些用户感到困惑,而符号本身并不表示实际金额是多少。

我还会参考以下SO问题。 并非所有这些都与您的问题直接相关,但他们对支持多种货币所涉及的问题进行了非常好的元讨论。

  • 如何在Java中汇总货币值
  • 用Java表示货币价值
  • 如何处理Java BigDecimal性能?

您可以存储每个货币代码的文化字符串,而不是仅存储货币符号,因此AUD – > en-AU

CultureInfo ci = new CultureInfo("en-AU"); currencyValue.ToString( "c", ci ); 

我不确定可用的格式有多大的灵活性。

不确定这是否有帮助:

格式化特定文化的数字数据

您可以将货币值存储为小数,然后在UI上附加货币符号。

Fowler在这里讨论了企业应用程序架构模式中的Money模式: http : //www.martinfowler.com/eaaCatalog/money.html

我遇到了类似的情况。 我找到了一种方法,不知道它对你有多大用处。 但它解决了我的问题。 我为每个地方设置了一个会话字符串,如Session [“cur”] =“0.000”或“0.00”,用于每次登录validation。 无论货币进入系统,我都使用.ToString [Session [“cur”]。ToString()]到模型变量。 它为我做了伎俩。 希望它也能帮到你。