Pergunta

Estou fazendo uma divisão em um JSP e eu gostaria de arredondar o resultado - como eu deveria fazer isso

i.

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

... como faço para arredondar o resultado?

Obrigado,

Foi útil?

Solução

Como alternativa:

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

Desta forma, você não localização Lose (vírgulas e pontos).

Outras dicas

eu usei:

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

que trunca em vez de arredondamento, mas que pode ser bom o suficiente.

Pode se parece com:

<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: Eu acho que você deve usar mod de qualquer maneira ou % funcionalidade do JSTL, eu uso mod no exemplo. Teste, por favor, "expira" e "agora" variáveis ??com valores diferentes, deve funcionar ok.

O que sobre esse truque sujo:

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

Mas eu faria isso em um bean e apenas mostrar o resultado aqui. Ao lado disso, você pode definir funções em seu TLD ou, se isso não é suportado no seu ambiente obter funções na linguagem de expressão através da implementação de um mapa e de (ab) uso. Você implementar o método get (Object) para fazer o que quiser e chamá-lo assim:

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

Note, Ajudantes fornece um "getRound ()" método que retorna a sua implementação Mapa. ??

Com a versão atual EL você pode usar

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

ou

<c:set var="expiry"
value="${Math.floor( (expire.time - now.time) / (60 * 1000) )}"/>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top