Comment arrondir un chiffre à JSTL?
4 réponses
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 (virgule et points).
j'ai utilisé:
${fn:substringBefore(expiry, '.')}
qui tronque plutôt que d'arrondir, mais cela peut être suffisant.
Il 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 mod de toute façon ou % fonctionnalité de jstl, j'utilise mod en exemple. Test,s'il vous plaît, "expire" et "maintenant", les variables avec des valeurs différentes, devrait fonctionner correctement.
quid de 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 haricot et juste montrer le résultat ici. À côté de cela, vous pouvez définir les fonctions dans votre tld ou, si cela n'est pas pris en charge dans votre environnement d'obtenir des fonctions dans le langage d'expression par la mise en œuvre d'une Carte et de (ab)de 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)]"/>
Note, Helpers fournit une méthode " getRound ()" qui retourne votre carte application.