有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在使用模式格式化货币时是否使用了正确的数字分隔符?

假设我使用以下<f:convertNumber>格式设置货币类型编号:

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

在英语中,一百万是1000000,但在德国,它应该是1000.000。我的问题是:如果我使用上述模式,JSF会知道指定区域设置的数字格式并自动使用正确的分隔符吗

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


共 (1) 个答案

  1. # 1 楼答案

    知道并理解<f:convertNumber>标记在封面下使用^{}是很重要的。您可以在its javadoc中找到所有模式字符

    似乎您期望DecimalFormat模式字符,.也实际用于最终格式。这是不真实的。它实际上只是模式字符(如dMy等,如SimpleDateFormat所使用的)。基本上,模式字符,告诉DecimalFormat按给定区域设置的指定打印“分组分隔符”,等价地,模式字符.告诉DecimalFormat按给定区域设置的指定打印“十进制分隔符”

    实际上,打印的实际字符取决于给定的区域设置。对于英语地区(locale="en"),正在打印的“分组分隔符”恰好也是,,但是对于德语地区(locale="de"),正在打印的“分组分隔符”确实是.


    与具体问题无关<f:convertNumber>type属性如果指定了pattern属性,则完全无效。在本例中type属性基本上是多余的,可以安全地移除,而不会产生任何副作用

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

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

    同样,请参见前面链接的DecimalFormatjavadoc