17

我正在使用 JSF 2 和 RichFaces 3。在下图中,数字显示为数据库中的数字。

在此处输入图像描述

但是我想将它们显示为6749395.20好像存在分数部分并且5095138.00没有分数部分一样。

到目前为止,我已经尝试过这样的事情。

 <rich:column>
    <f:facet name="header">
        <h:outputText value="Total Amount"/>
    </f:facet>
    <h:outputText value="#{rr[2]}">
        <f:convertNumber type="number" groupingUsed="true" minFractionDigits="2" pattern="#0.00"/>
    </h:outputText>
 </rich:column>

实际上我将它们全部展示在一起,但我已经尝试将它们全部作为所有可能的组合与type,groupingUsed和.minFractionDigitspattern

为什么它不起作用?这是如何引起的,我该如何解决?

4

1 回答 1

44

如果值根本不是 a ,则可能发生这种情况Number,例如 a String。然后,您基本上对它所代表的数据使用了错误的类型。要在 Java 中表示货币,您应该使用BigDecimal. 另外,请确保数据库表中的类型正确,即它不应该是varchar,而应该是decimal。

一旦你修复了数据类型,它<f:convertNumber>就会按照你告诉它的方式工作。请注意,该pattern属性将覆盖groupingUsedand minFractionDigits。您应该使用 thepattern other。此外,type="number"已经是默认设置,因此可以将其删除。

所以,要么使用

<f:convertNumber pattern="#0.00" />

或者

<f:convertNumber groupingUsed="true" minFractionDigits="2" />

请注意,它们生成不同的格式。您可能希望将分组设置为false.

您也可以使用type="currency",然后它会根据以下自动应用正确的模式UIViewRoot#getLocale()

<f:convertNumber type="currency" />

另请参阅标记库文档DecimalFormatjavadoc。

于 2012-05-02T12:29:22.603 回答