Domanda

Sto facendo una divisione in un JSP e vorrei arrotondare il risultato - come dovrei farlo?

vale a dire.

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

... come arrotondare il risultato?

Grazie,

È stato utile?

Soluzione

In alternativa:

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

In questo modo non si perde la localizzazione (virgole e punti).

Altri suggerimenti

Ho usato:

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

che tronca anziché arrotondare, ma potrebbe essere abbastanza buono.

Potrebbe apparire come:

<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: penso che dovresti usare mod comunque o % funzionalità di jstl, io uso la mod in esempio. Prova, per favore, " scadere " e "ora" variabili con valori diversi, dovrebbero funzionare bene.

Che dire di questo sporco hack:

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

Ma lo farei in un bean e mostrerei il risultato qui. Inoltre, puoi definire funzioni nella tua tld o, se ciò non è supportato nel tuo ambiente ottenere funzioni nel linguaggio delle espressioni implementando una mappa e (ab) usarla. Implementate il metodo get (Object) per fare ciò che volete e chiamatelo così:

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

Nota, Helpers fornisce un " getRound () " metodo che restituisce l'implementazione della mappa.

Con l'attuale versione EL puoi usare

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

o

<c:set var="expiry"
value="${Math.floor( (expire.time - now.time) / (60 * 1000) )}"/>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top