tag lib formatnumber fmt java jsp tags jstl rounding

java - lib - JSTL Redondea/baja el número



jstl java (2)

Usa la división integral para obtener el valor de min , en lugar de la división de coma flotante:

<c:set var="min" value="${seconds div 60}" />

Ahora obtienes min = 12, y no tienes que preocuparte por los problemas de redondeo.

Esta podría ser una pregunta tonta, pero digamos que tengo seconds variables en mi página JSP y su valor es 779. Ahora quiero convertirlo en minutos y segundos haciendo lo siguiente:

<c:set var="${seconds / 60}" value="min"/> <c:set var="${seconds mod 60}" value="sec">

De esta manera obtengo min = 12.983333 y sec = 59.0.

Ahora quiero fusionar los dos y mostrar el resultado como 12:59. El problema que estoy enfrentando es que min se redondea a 13. He intentado muchas cosas, como:

<fmt:parseNumber var="minutes" integerOnly="true" type="number" value="${min}" /> <fmt:formatNumber type="number" pattern="###" value="${min}" var="minutes" /> fn:substringBefore(min, ''.'') maxFractionDigits="0" // and so on...

Pero todos ellos solo devuelven 13 de manera consistente. Estoy un poco despistado en este punto. Pero puede haberme perdido algo. Espero que alguien aquí tenga una idea, o una pista, sobre lo que podría estar mal.

-editar

El código siguiente lo hizo funcionar al final. No tengo idea de qué estaba mal, ya que también está trabajando con "/" ahora. Tal vez un pequeño error en otro lugar. Sin embargo, muchas gracias por su tiempo :) Felicitaciones!

<c:set var="min" value="${fn:substringBefore((seconds div 60), ''.'')}"/> <fmt:formatNumber var="sec" pattern="##" value="${seconds mod 60)}"/>


Esto (abajo) debería ser la única forma segura de hacerlo. pattern = "##" no está bien soportado, minIntegerDigits = "2" es más fácil y más limpio.

<c:set var="minutes" value="${fn:substringBefore(seconds div 60, ''.'')}"/> <fmt:formatNumber var="seconds" minIntegerDigits="2" value="${ seconds - (minutes*60) }"/>