math - tag - ¿Cómo redondeo un número en JSTL?
tag lib jstl (4)
¿Qué hay de este sucio truco?
<c:set
var="expiry"
value="${(((expire.time - now.time) / (60 * 1000) * 100) - 0.5) / 100.0}"/>
Pero haría esto en un frijol y solo mostraré el resultado aquí. Además de esto, puede definir funciones en su tld o, si eso no es compatible con su entorno, obtener funciones en el lenguaje de expresiones implementando un Mapa y (ab) usarlo. Implementa el método get (Object) para hacer lo que quiere y llamarlo así:
<c:set
var="expiry"
value="${Helpers.round[(expire.time - now.time) / (60 * 1000)]"/>
Tenga en cuenta que Helpers proporciona un método "getRound ()" que devuelve la implementación de su mapa.
Estoy haciendo una división en un JSP y me gustaría redondear el resultado, ¿cómo debo hacer esto?
es decir
<c:set
var="expiry"
value="${(expire.time - now.time) / (60 * 1000)}"/>
... ¿cómo redondeo el resultado?
Gracias,
Como alternativa:
<fmt:formatNumber var="expiry"
value="${(expire.time - now.time) / (60 * 1000)}"
maxFractionDigits="0" />
De esta forma, no pierde localización (comas y puntos).
Puede verse así:
<c:set var="expire" value="100"/>
<c:set var="now" value="3"/>
<c:choose>
<c:when test="${(expire mod now)!=0}">
<c:set var="res" value="${(expire - (expire mod now))/now}"/>
${res}
</c:when>
<c:otherwise>
<c:set var="res" value="${expire/now}"/>
${res}
</c:otherwise>
</c:choose>
nota: creo que deberías usar mod de todos modos o % funcionalidad de jstl, uso mod en ejemplo. Las variables de prueba, por favor, "caducar" y "ahora" con diferentes valores, deberían funcionar bien.
Solía:
${fn:substringBefore(expiry, ''.'')}
que trunca en lugar de redondear, pero eso puede ser lo suficientemente bueno.