【问题标题】:Best Practice - Format Multiple Currencies最佳实践 - 格式化多种货币
【发布时间】:2009-04-24 07:00:02
【问题描述】:

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

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

【问题讨论】:

标签: c# internationalization currency cultureinfo regioninfo


【解决方案1】:

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

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

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

SO - Currency formatting

【讨论】:

  • 我知道这是一个旧答案,但您应该在此处引用这些链接的相关部分。
【解决方案2】:

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

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

此外,如果您的要求是在 any 语言环境中显示 any 货币,那么ISO4217 标准是您的最佳选择。这是在世界各地的货币兑换店、货币兑换处、发票等上显示的内容。否则,显示货币符号可能会让一些用户感到困惑,而且该符号本身并不表示实际金额是什么货币。

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

【讨论】:

    【解决方案3】:

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

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

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

    不确定这是否有帮助:

    Formatting Numeric Data for a Specific Culture

    【讨论】:

    • 这对于在多个地区使用的货币(如欧元)来说不是一个可行的解决方案。欧元区不同的国家有不同的数字格式。
    • 我同意。数字格式必须尊重计算机的当前文化,而货币符号代表任何货币。提出的解决方案不可行。
    【解决方案4】:

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

    Fowler 在Patterns of Enterprise Application Architecture 中讨论了金钱模式:http://www.martinfowler.com/eaaCatalog/money.html

    【讨论】:

      【解决方案5】:

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

      【讨论】:

        猜你喜欢
        • 2011-10-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-08
        • 2011-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多