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

时间:2009-04-24 07:00:02

标签: c# internationalization currency cultureinfo regioninfo

下面列出的方案的最佳做法是什么?

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

5 个答案:

答案 0 :(得分:7)

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

SO - Proper currency format when not displaying the native currency of a culture

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

SO - Currency formatting

答案 1 :(得分:3)

听起来您可以处理格式化数据的最佳做法。如果我是你,我会更少担心技术上的标准,但更多地关注用户习惯的内容。

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

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

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

答案 2 :(得分:1)

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

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

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

不确定这是否有帮助:

Formatting Numeric Data for a Specific Culture

答案 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()]到模型变量。它为我做了伎俩。希望它也能帮到你。