Pregunta

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,

¿Fue útil?

Solución

Como alternativa:

<fmt:formatNumber var="expiry"
  value="${(expire.time - now.time) / (60 * 1000)}"
  maxFractionDigits="0" />

De esta manera no pierde la localización (comas y puntos).

Otros consejos

Utilicé:

${fn:substringBefore(expiry, '.')}

que se trunca en lugar de redondear, pero eso puede ser lo suficientemente bueno.

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ía usar mod de todos modos o la funcionalidad % de jstl, uso mod en ejemplo. Prueba, por favor, "caduca" y "ahora" variables con diferentes valores, deberían funcionar bien.

¿Qué pasa con este truco sucio?

<c:set
  var="expiry"
  value="${(((expire.time - now.time) / (60 * 1000) * 100) - 0.5) / 100.0}"/>

Pero haría esto en un bean y solo mostraría 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 expresión implementando un Mapa y (ab) usarlo. Implementa el método get (Object) para hacer lo que quiere y lo llama así:

<c:set
  var="expiry"
  value="${Helpers.round[(expire.time - now.time) / (60 * 1000)]"/>

Nota, Helpers proporciona un "getRound ()" método que devuelve su implementación de Mapa. ??

Con la versión EL actual puede usar

<c:set var="expiry"
value="${Math.round( (expire.time - now.time) / (60 * 1000) )}"/>

o

<c:set var="expiry"
value="${Math.floor( (expire.time - now.time) / (60 * 1000) )}"/>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top