Je fais une division dans un JSP et j'aimerais arrondir le résultat - comment dois-je faire cela?
c'est à dire.
<c:set
var="expiry"
value="${(expire.time - now.time) / (60 * 1000)}"/>
... comment arrondir le résultat?
Merci,
Comme alternative:
<fmt:formatNumber var="expiry"
value="${(expire.time - now.time) / (60 * 1000)}"
maxFractionDigits="0" />
De cette façon, vous ne perdez pas la localisation (virgules et points).
J'ai utilisé:
${fn:substringBefore(expiry, '.')}
qui tronque plutôt que d'arrondir, mais cela peut être suffisant.
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>
note: je pense que vous devriez utiliser mod de toute façon ou % fonctionnalité de jstl, j'utilise mod dans l'exemple. Testez, s'il vous plaît, les variables "expirer" et "maintenant" avec des valeurs différentes, devraient fonctionner correctement.
Et ce sale hack:
<c:set
var="expiry"
value="${(((expire.time - now.time) / (60 * 1000) * 100) - 0.5) / 100.0}"/>
Mais je le ferais dans un bean et montrerais juste le résultat ici. En plus 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 l'appelez comme ceci:
<c:set
var="expiry"
value="${Helpers.round[(expire.time - now.time) / (60 * 1000)]"/>
Remarque, Helpers fournit une méthode "getRound ()" qui retourne votre implémentation Map.
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) )}"/>