2009-09-18 10 views
29

Robię podział w JSP i chciałbym zaokrąglić wynik - jak mam to zrobić?Jak zaokrąglić liczbę w JSTL?

tj

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

... jak mam zaokrąglić wynik?

Dzięki,

Odpowiedz

54

Jako alternatywę:

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

ten sposób nie stracisz lokalizacyjne (przecinki i kropki).

+2

Zgodziłbym się z tą odpowiedzią. JSTL nie powinno zajmować się "poprawnym" wdrażaniem jakiejkolwiek logiki, takiej jak zaokrąglanie. To decyzja średniego szczebla. JSP i JSTL powinny być wyświetlane tylko. Znacznik formatu jest prawidłowy. – duffymo

+0

Uważaj, zależy to od bieżących ustawień narodowych https://stackoverflow.com/a/16899830/1606662 – Chintsu

1

Co o tym brudnym Hack:

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

Ale chciałbym to zrobić w fasoli i po prostu pokazać wynik tutaj. Poza tym możesz define functions in your tld lub, jeśli nie jest to obsługiwane w twoim środowisku, uzyskaj funkcje w języku wyrażeń poprzez zaimplementowanie mapy i (ab) jej użycie. Zaimplementować metodę get (Object), aby robić to, co chcesz i nazwać tak:

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

Uwaga, pomocnicy zapewnia „getRound()” metoda, która zwraca implementacji Map.

2

Może ona wygląda:

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

uwaga: myślę, że należy użyć mod lub w każdym razie % funkcjonalność JSTL używam mod w przykładzie. Testuj, proszę, "wygasaj" i "teraz" zmienne o różnych wartościach, powinny działać poprawnie.

8

użyłem:

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

który obcina zamiast zaokrąglania, ale to może być wystarczająco dobre.

+0

Po prostu to, czego potrzebowałem, obcięcie. Dzięki! – Jan

+2

Należy zachować ostrożność, w niektórych językach separatorem dziesiętnym jest przecinek (np. Hiszpański) –