2012-07-31 10 views
16

En JSTL,techo de un número en JSTL/EL

<fmt:formatNumber value="${1.6}" type="number" pattern="#"/> 

vuelve 2 y la siguiente

<fmt:formatNumber value="${1.4}" type="number" pattern="#"/> 

vuelve 1 y necesito 2, un techo de un número.

¿Hay una forma directa de lograr esto en JSTL (o la única manera de hacerlo es mediante el uso de una etiqueta personalizada adecuada)?

Respuesta

21

El modo por defecto de DecimalFormat que se utiliza por <fmt:formatNumber> redondeo es RoundingMode.HALF_EVEN. No hay forma de cambiar eso a través de ningún atributo de etiqueta. Simplemente agregue 0.5 al valor cuando no sea un número impar para que se comporte como RoundingMode.CEILING.

<fmt:formatNumber value="${bean.number + (bean.number % 1 == 0 ? 0 : 0.5)}" 
    type="number" pattern="#" /> 
4

probar este código:

<fmt:formatNumber value="${N+(1-(N%1))%1}" type="number" pattern="#"/> 

donde N es el nombre de la variable.

Regards

+0

Lo bueno de este método es que puede convertirlo fácilmente en redondeo de piso simplemente cambiándolo a '$ {N- (1- (N% 1))% 1}'. – AxeEffect

+0

¿No te refieres a $ {N- (N% 1)} @AxeEffect? – kacpr

Cuestiones relacionadas