3

假设我有以下内容<f:convertNumber>来格式化货币类型数字:

<f:convertNumber type="currency" locale="#{userSession.locale}" pattern="$###,###.###" />

在英语中,一百万是 1,000,000,但在德国,应该是 1.000.000。我的问题是:如果我使用上述模式,JSF 会知道指定语言环境的数字格式并自动使用正确的分隔符吗?

如果没有,如果您能告诉我如何格式化货币编号并同时指定正确的数字分隔符,我将不胜感激。

4

1 回答 1

5

了解并理解<f:convertNumber>标签DecimalFormat在幕后使用非常重要。您可以在其 javadoc中找到所有模式字符。

似乎您期望DecimalFormat模式字符,并且.实际上也用于最终格式。这是不真实的。它实际上只是模式字符(如 as dMySimpleDateFormat)。基本上,模式字符,告诉DecimalFormat打印给定语言环境指定的“分组分隔符”,等效地,模式字符.告诉DecimalFormat打印给定语言环境指定的“小数分隔符”。

实际上,实际打印的字符取决于给定的语言环境。对于英语语言环境(locale="en"),打印的“分组分隔符”也只是巧合,,但对于德语语言环境(locale="de"),打印的“分组分隔符”确实是.


与具体问题无关type,如果指定了属性,则属性<f:convertNumber>完全没有作用pattern。该type属性在此示例中基本上是多余的,可以安全地删除而没有任何副作用。

如果您删除该pattern属性,那么它实际上会被使用,并且您会看到正在使用货币的默认模式,这与¤#,##0.00英语语言环境和¤ #,##0.00德语语言环境相同。另请注意,表示货币符号的模式字符不是$,而是¤currencySymbol货币符号可以通过属性单独设置。因此,货币的正确方法是:

<f:convertNumber type="currency" locale="#{userSession.locale}" currencySymbol="$" />

同样,请参阅DecimalFormat之前链接的 javadoc。

于 2013-11-04T12:51:27.037 回答