22

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

4

4 回答 4

29

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);
于 2011-05-19T22:29:44.913 回答
19

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

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

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

于 2009-04-16T23:01:47.497 回答
2

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

您要查找的信息不是内置 Java 货币数据库的一部分,因此没有用于它的 API。您可以为许多明确的情况创建自己的表。

于 2009-04-16T22:26:01.730 回答
0

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

于 2009-04-16T22:53:53.117 回答