Displaying a number in 2 point decimal format in jsf
converters, java, jsf-2, richfaces
Solution
That can happen if the value is not a `Number` at all, for example a `String`. You're then basically using the wrong type for the data it represents. To represent currencies in Java, you should be using `BigDecimal`. Also, make sure that the type in the database table is right, i.e. it should not be a varchar, but a decimal.
Once you've fixed the data type, then the `<f:convertNumber>` will work as you told it to do. Note that the `pattern` attribute will override the `groupingUsed` and `minFractionDigits`. You should use either the `pattern` or the others. Also, `type="number"` is already the default, so it can be removed.
So, either use
<f:convertNumber pattern="#0.00" />
or
<f:convertNumber groupingUsed="true" minFractionDigits="2" />
Note that they generate different formats. You probably want to set grouping to `false`.
You can also use `type="currency"`, it will then automatically apply the right pattern as per the `UIViewRoot#getLocale()`:
<f:convertNumber type="currency" />
See also the tag library documentation and the `DecimalFormat` javadoc.
Problem
I am using JSF 2 and RichFaces 3. Here in the picture shown below, numbers are being displayed as what they are in the database. But I want to display them as `6749395.20` if fraction part is there and `5095138.00` if no fraction part is there. As of now I have tried something like this. ``` <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> ``` Actually I am showing all of them together, but I have tried with all of them as all possible combinations with `type`, `groupingUsed`, `minFractionDigits` and `pattern`. Why does it not work? How is this caused and how can I solve it?