Подтвердить что ты не робот

Отображение числа в двухточечном десятичном формате в jsf

Я использую JSF 2 и RichFaces 3. Здесь, на изображении, показанном ниже, номера отображаются как то, что они находятся в базе данных.

enter image description here

Но я хочу отобразить их как 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, minFractionDigits и pattern.

Почему это не работает? Как это вызвано и как я могу его решить?

4b9b3361

Ответ 1

Это может произойти, если значение вообще не Number, например a String. В основном вы используете неправильный тип для данных, которые он представляет. Чтобы представлять валюты в Java, вы должны использовать BigDecimal. Кроме того, убедитесь, что тип в таблице базы данных прав, т.е. Он не должен быть varchar, а десятичным.

Как только вы исправили тип данных, тогда <f:convertNumber> будет работать так, как вы сказали ему. Обратите внимание, что атрибут pattern переопределит groupingUsed и minFractionDigits. Вы должны использовать либо pattern , либо остальные. Кроме того, type="number" уже по умолчанию, поэтому его можно удалить.

Итак, используйте

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

или

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

Обратите внимание, что они генерируют разные форматы. Вероятно, вы хотите установить группировку в false.

Вы также можете использовать type="currency", затем автоматически примените правильный шаблон в соответствии с UIViewRoot#getLocale():

<f:convertNumber type="currency" />

См. также документацию библиотеки тегов и DecimalFormat javadoc.