Question

Je fais une division dans un JSP et j'aimerais arrondir le résultat - comment dois-je faire cela?

i.e.

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

... comment puis-je arrondir le résultat?

Merci,

Était-ce utile?

La solution

Comme alternative:

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

Ainsi, vous ne perdez pas la localisation (virgules et points).

Autres conseils

j'ai utilisé:

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

qui tronque plutôt que d'arrondir, mais cela peut suffire.

Cela peut ressembler à:

<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>

remarque: je pense que vous devriez utiliser de toute façon mod ou % de jstl, j'utilise mod dans l'exemple. Testez, s'il vous plaît, "Expire". et " maintenant " les variables avec des valeurs différentes devraient fonctionner correctement.

Qu'en est-il de ce sale bidouille:

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

Mais je le ferais dans un haricot et montrerais simplement le résultat ici. A côté de cela, vous pouvez définir des fonctions dans votre tld ou, si cela n'est pas pris en charge dans votre environnement obtenir des fonctions dans le langage d'expression en implémentant une carte et (ab) l'utiliser. Vous implémentez la méthode get (Object) pour faire ce que vous voulez et vous l'appelez comme suit:

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

Remarque, Helpers fournit un "getRound ()". méthode qui renvoie votre implémentation de la carte.

Avec la version EL actuelle, vous pouvez utiliser

<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) )}"/>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top