是否 使用格式设置货币格式时使用正确的数字分隔符?
假设我有以下<f:convertNumber>
格式设置货币类型的数字:
<f:convertNumber type="currency" locale="#{userSession.locale}" pattern="$###,###.###" />
用英语,一百万将等于一百万,而在德国,则应为1.000.000。我的问题是:如果使用上述模式,JSF是否会知道指定语言环境的数字格式并自动使用正确的分隔符?
如果没有,请您告诉我如何设置货币编号并同时指定正确的数字分隔符,我将不胜感激。
回答:
重要的是要了解和理解<f:convertNumber>
标签在幕后的使用DecimalFormat
。您可以在其javadoc中找到所有模式字符。
看来您希望DecimalFormat
模式字符,
和.
也实际上以最终格式使用。这是不正确的。它是真的仅仅 模式字符
(如等d
,M
,y
等13759
SimpleDateFormat
)。基本上,模式字符,
告诉DecimalFormat
打印给定语言环境指定的“分组分隔符”,并且等效地,模式字符.
告诉DecimalFormat
打印给定语言环境指定的“小数分隔符”。
实际上,要打印的实际字符取决于给定的语言环境。对于英语语言环境(locale="en"
),正在打印的“分组分隔符”也只是巧合,
,但是对于德语语言环境(locale="de"
),正在打印的“分组分隔符”的确是.
。
的具体问题,type
的属性<f:convertNumber>
有,如果完全没有影响pattern
是指定的属性。该type
attribtue是在这个例子中基本上多余的,并且可以安全地无任何副作用除去。
如果删除该pattern
属性,则实际上将使用该属性,并且会看到使用的是货币的默认模式,该模式与¤#,##0.00
英语语言环境和`¤
,##0.00德语语言环境相同。另请注意,表示货币符号的图案字符不是
$,而是
¤。可以通过
currencySymbol`属性单独设置货币符号。因此,正确的货币处理方法是:
<f:convertNumber type="currency" locale="#{userSession.locale}" currencySymbol="$" />
同样,请参阅DecimalFormat
之前链接的javadoc。
以上是 是否 使用格式设置货币格式时使用正确的数字分隔符? 的全部内容, 来源链接: utcz.com/qa/410160.html