【问题标题】:Java: Currency to Locale Mapping Possible?Java:货币到语言环境的映射可能吗?
【发布时间】:2010-10-19 23:38:28
【问题描述】:

我在数据库中存储了一个与货币金额相关的值,例如 10.0。我还可以访问 Currency/CurrencyCode。当我不知道语言环境时,如何使用 NumberFormat/DecimalFormat/(other?) 进行格式化?根据文档,它将选择一个不适用于外币的默认语言环境。

【问题讨论】:

    标签: java formatting currency


    【解决方案1】:

    JasonTrue 是正确的,但您可以覆盖 NumberFormat 语言环境的货币:

    NumberFormat numberFormat = NumberFormat.getCurrencyInstance(locale);
    //the user may have selected a different currency than the default for their locale
    Currency currency = Currency.getInstance("GBP");
    numberFormat.setCurrency(currency);
    numberFormat.format(amount);
    

    【讨论】:

      【解决方案2】:

      一般来说,正确的行为是在用户的首选语言环境中格式化金额,而不是货币的典型语言环境。在客户端,您将拥有用户的偏好 (Locale.getDefault());如果您在 Web 服务器端执行某些操作,请使用 Accept-Language,或者最好使用页面内容的语言环境来获取正确的语言环境。

      原因是这样的: 英美用户会理解 € 10,000,000.15,但不理解适合德国的等值 € 10.000.000,15

      无论如何,货币本身不包含足够的信息来推断合适的语言环境。

      【讨论】:

        【解决方案3】:

        如果货币代码是欧元怎么办?而且,虽然它受到了打击,但美元仍在世界各地使用。从货币代码推断语言环境似乎不可靠。您能否改为为语言环境引入明确的用户偏好?

        您要查找的信息不是内置 Java 货币数据库的一部分,因此没有用于它的 API。对于许多明确的情况,您可以create your own table

        【讨论】:

          【解决方案4】:

          我会说,如果您的数据库正在存储货币值,它应该同时挂在单位上。听起来你现在正在这样做。您可以同时将语言环境添加到数据库中吗?可能是一个不错的解决方案。

          【讨论】:

            猜你喜欢
            • 2012-09-23
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多