2009-09-18 4 views
29

Ich mache eine Abteilung in einer JSP und ich möchte das Ergebnis runden - wie soll ich das machen?Wie runde ich eine Nummer in JSTL?

heißt

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

... wie runden ich das Ergebnis?

Danke,

Antwort

54

Als Alternative:

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

Auf diese Weise verlieren Sie Lokalisierung (Kommas und Punkte) nicht.

+2

Ich würde dieser Antwort zustimmen. JSTL sollte nicht daran interessiert sein, Logik wie Rundung "richtig" zu implementieren. Das ist eine mittlere Entscheidung. JSP und JSTL sollten nur angezeigt werden. Das Format-Tag ist das Richtige. – duffymo

+0

Vorsicht, es hängt vom aktuellen Gebietsschema ab https://Stackoverflow.com/a/16899830/1606662 – Chintsu

1

Was ist mit diesem schmutzigen Hack:

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

Aber ich würde dies in einer Bohne tun und zeigen nur das hier Ergebnis. Außerdem können Sie define functions in your tld oder, wenn das in Ihrer Umgebung nicht unterstützt wird, Funktionen in der Ausdruckssprache erhalten, indem Sie eine Map implementieren und (ab) verwenden. Sie implementieren die get (Object) -Methode zu tun, was Sie wollen und es so nennen:

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

Hinweis, Helfer ein „getRound()“ Methode zur Verfügung, die Ihre Karte Implementierung zurückgibt.

2

Es kann wie folgt aussieht:

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

Anmerkung: Ich denke, Sie sollten mod sowieso oder % Funktionalität von jstl verwenden, i mod in Beispiel. Test, bitte, "ablaufen" und "jetzt" Variablen mit unterschiedlichen Werten, sollte in Ordnung sein.

8

I verwendet:

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

die eher abschneidet als Abrundung, aber das gut genug sein kann.

+0

Genau das, was ich brauchte, abgeschnitten. Vielen Dank! – Jan

+2

Seien Sie vorsichtig, in einigen Sprachen ist das Dezimaltrennzeichen das Komma (z. B. Spanisch) –