17

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

我们有一个希望支持多种货币的应用程序。该软件将尊重用户的区域设置和区域设置以指示正确的数字格式,即 $10,000.00 或 10.000,00₴ 等。

然而,我们希望能够根据货币 ID(可能是三个字母的 ISO4217 代码)格式化不同的数字。我们的想法是在数据库中存储一个包含每种货币的表,然后请求用户选择将使用的货币符号。然后程序将根据区域设置/区域设置格式化所有数字,但将使用我们程序中定义的货币符号。

因此,给定以下值和货币
10000 AUD
5989.34 USD
450 EUR

该程序将输出
$10,000.00
$5,989.34
€450.00

或者使用将数字格式化为 #####,##$ 的区域设置,结果将是;
10000,00$
5989,34$
450,00€

尊重区域设置/区域编号格式但显示不同的货币,对此的最佳做法是什么?

我希望这是有道理的。

使用的技术是 c# .NET 2.0。

4

5 回答 5

7

我认为这个 Q 是关于你应该做什么的一个很好而明确的答案

SO - 不显示文化的本国货币时的正确货币格式

这个 Q 对如何在 C# 中执行此操作有一个很好的答案

SO - 货币格式

于 2009-07-01T21:33:33.827 回答
3

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

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

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

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

于 2009-04-24T09:37:43.153 回答
1

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

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

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

不确定这是否有帮助:

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

于 2009-04-24T09:38:42.650 回答
0

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

Fowler 在此处讨论企业应用程序架构模式中的金钱模式:http : //www.martinfowler.com/eaaCatalog/money.html

于 2009-04-24T07:07:53.653 回答
0

我遇到了类似的情况。我找到了一种方法,不知道它对你有多大用处。但它解决了我的问题。我为每个登录身份验证的每个地方设置了一个会话字符串,例如 Session["cur"]="0.000" 或 "0.00"。在系统中出现货币时,我使用 .ToString[Session["cur"].ToString()] 来处理模型变量。它对我有用。希望它对你也有帮助。

于 2017-02-13T14:31:41.997 回答