Как я могу округлять и показывать в 2 десятичных в JSF?

Не, поскольку он мог бы округлять и показывать в двух десятичных. Хотя я использовал для округления класс Math.round, но не смог решать это. introducir la descripción de la imagen aquí

Я оставляю им код

Bean:

private double igv;
private double subtotal;    

public void agregar() {
    subtotal+=Math.round((det1.getCantidad()*det1.getPreciocompra()/1.18)*100.0)/100.0;
            igv+=Math.round(((det1.getCantidad()*det1.getPreciocompra()/1.18)*0.18)*100.0)/100.0;
}

Facelets:

                              
                              
  
                             
  
                               
  
                             
                                 
                               
  
  
  

2
задан 07.03.2016, 18:49
4 ответа

Прежде всего, не используй double, лучше использовать BigDecimal так как он предлагает лучшую точность, поработав с этими числами. Пальто, ты был бы должен использовать BigDecimal поработав в финансовых операциях той, которую ты показываешь в твоем примере.

В любом случае, если он состоит в том, что ты не будешь менять тип информации о твоих переменных, что ты должен делать, состоит в том, чтобы использовать <f:convertNumber>. Эта этикетка позволяет тебе давать формат числу как количество десятичных положений, отчекань, и другие. Здесь я оставляю тебе пример:

<h:outputText value="#{bean.subtotal}">
    <f:convertNumber pattern="#0.00" />
</h:outputText>

Поле pattern он основывается на главных файлах, которые он выносит класс DecimalFormat. Чтобы понимать главный файл наверху, должны быть понятны следующие символы:

  • #: любая цифра, опциональный.
  • .: десятичная точка.
  • 0: любая цифра, обязательный.

Использованный главный файл #0.00 значь, что у числа могут быть один или больше цифр в целой части, потом десятичная точка и в конце концов, два десятичных числа обязательным образом.

Основанный на твоем коде Facelets, ты был бы должен менять это таким образом:

<p:row>
    <p:column colspan="4" style="text-align:right"
        footerText="SUB-TOTAL" />
    <p:column style="text-align: right">
         <f:facet name="footer">
             <h:outputText value="#{entradaBean.subtotal}">
                <f:convertNumber pattern="#0.00" />
            </h:outputText>
         </f:facet>
    </p:column>
    <!-- lo mismo para los otros campos -->
</p:row>
5
ответ дан 24.11.2019, 14:46
  • 1
    меня производит эта ошибка я это буду исследовать Parent not an instance of ValueHolder: org.primefaces.component.column – Libra2880 07.03.2016, 18:47
  • 2
    издайте мой вопрос и я поместил c и # 243; я говорю не, потому что он не показывает??? – Libra2880 07.03.2016, 18:49
  • 3
    Это, потому что не est и # 225; незубья как c и # 243; я говорю, что признавать, и # 237; в Markdown, и по умолчанию предотврати renderizado любой c и # 243; я говорю со структурой HTML, чтобы предотвращать проблемы inyecci и # 243; n. Я только что издал текст для того, чтобы было возможно видеть c и # 243; я говорю. –  07.03.2016, 18:50
  • 4
    ok спасибо Luiggi – Libra2880 07.03.2016, 18:52
  • 5
    Обновленный ответ. Пожалуйста rev и # 237; я солю и скажи мне, если в и # 250; n есть проблемы. –  07.03.2016, 18:58

Никогда, но никогда не используй формат Double когда ты сделаешь финансовые счета, общие суммы не придадут квадратную форму так как Java в этом случае окажи предпочтение эффективности на точности. Используй BigDecimal

 BigDecimal valor = new BigDecimal(37.288136);

 BigDecimal valorRedondeado = valor.setScale(2, BigDecimal.ROUND_HALF_UP)

Где:

  • ROUND_HALF_UP показывает, что округлили, если он равен или превосходящий 5 в последней цифре десятичной части потом redondeable.
  • 2 - число десятичных, который ты желаешь.

А следовательно результат был бы 37.29

Я надеюсь, что он подает тебя, и ты принимаешь мой ответ.

1
ответ дан 24.11.2019, 14:46

ты Можешь менять ее, из-за. или давать ему более десятичные, если ты хочешь, оно функционирует очень похоже на format, которые один реализует с данными, тип Датировал

 private static DecimalFormat df2 = new DecimalFormat(",##");

        public static void main(String[] args) {

            double input = 32.123456;
            System.out.println("double : " + input);
            System.out.println("double : " + df2.format(input));

        }
0
ответ дан 24.11.2019, 14:46

Если оно использовано primefaces, было возможно использовать primefaces extensions http://www.primefaces.org/showcase-ext/sections/inputNumber/basicUsage.jsf

0
ответ дан 24.11.2019, 14:46