java在使用模式格式化货币时是否使用了正确的数字分隔符?
假设我使用以下<f:convertNumber>
格式设置货币类型编号:
<f:convertNumber type="currency" locale="#{userSession.locale}" pattern="$###,###.###" />
在英语中,一百万是1000000,但在德国,它应该是1000.000。我的问题是:如果我使用上述模式,JSF会知道指定区域设置的数字格式并自动使用正确的分隔符吗
如果没有,如果您能告诉我如何格式化货币编号,同时指定正确的数字分隔符,我将不胜感激
# 1 楼答案
知道并理解} 是很重要的。您可以在its javadoc中找到所有模式字符
<f:convertNumber>
标记在封面下使用^{似乎您期望
DecimalFormat
模式字符,
和.
也实际用于最终格式。这是不真实的。它实际上只是模式字符(如d
、M
、y
等,如SimpleDateFormat
所使用的)。基本上,模式字符,
告诉DecimalFormat
按给定区域设置的指定打印“分组分隔符”,等价地,模式字符.
告诉DecimalFormat
按给定区域设置的指定打印“十进制分隔符”实际上,打印的实际字符取决于给定的区域设置。对于英语地区(
locale="en"
),正在打印的“分组分隔符”恰好也是,
,但是对于德语地区(locale="de"
),正在打印的“分组分隔符”确实是.
与具体问题无关,
<f:convertNumber>
的type
属性如果指定了pattern
属性,则完全无效。在本例中type
属性基本上是多余的,可以安全地移除,而不会产生任何副作用如果删除
pattern
属性,那么它将实际被使用,并且您将看到正在使用货币的默认模式,这与英语语言环境的¤#,##0.00
和德语语言环境的¤ #,##0.00
相同。还要注意,表示货币符号的模式字符不是$
,而是¤
。货币符号可以通过currencySymbol
属性单独设置。因此,正确的货币方法是:同样,请参见前面链接的
DecimalFormat
javadoc