小编典典

是否 使用格式设置货币格式时使用正确的数字分隔符?

java

假设我有以下<f:convertNumber>格式设置货币类型的数字:

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

用英语,一百万将等于一百万,而在德国,则应为1.000.000。我的问题是:如果使用上述模式,JSF是否会知道指定语言环境的数字格式并自动使用正确的分隔符?

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


阅读 448

收藏
2020-09-26

共1个答案

小编典典

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

看来您希望DecimalFormat模式字符,.也实际上以最终格式使用。这是不正确的。它是真的仅仅 模式字符
(如等dMy等13759
SimpleDateFormat)。基本上,模式字符,告诉DecimalFormat打印给定语言环境指定的“分组分隔符”,并且等效地,模式字符.告诉DecimalFormat打印给定语言环境指定的“小数分隔符”。

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


无关
的具体问题,type的属性<f:convertNumber>有,如果完全没有影响pattern是指定的属性。该typeattribtue是在这个例子中基本上多余的,并且可以安全地无任何副作用除去。

如果删除该pattern属性,则实际上将使用该属性,并且会看到使用的是货币的默认模式,该模式与¤#,##0.00英语语言环境和`¤

,##0.00德语语言环境相同。另请注意,表示货币符号的图案字符不是$,而是¤。可以通过currencySymbol`属性单独设置货币符号。因此,正确的货币处理方法是:

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

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

2020-09-26