2012-07-31 16 views
16

In JSTL,Decke einer Zahl in JSTL/EL

<fmt:formatNumber value="${1.6}" type="number" pattern="#"/> 

kehrt 2 und die folgende

<fmt:formatNumber value="${1.4}" type="number" pattern="#"/> 

kehrt 1 und ich brauche 2, eine Decke aus einer Reihe.

Gibt es eine direkte Möglichkeit, dies in JSTL zu erreichen (oder die einzige Möglichkeit, dies zu tun, ist die Verwendung eines geeigneten benutzerdefinierten Tags)?

Antwort

21

Der Standardmodus von DecimalFormat Abrunden, die durch <fmt:formatNumber> verwendet wird, ist RoundingMode.HALF_EVEN. Es gibt keine Möglichkeit, dies über ein beliebiges Tag-Attribut zu ändern. Fügen Sie einfach 0.5 zu dem Wert hinzu, wenn es keine ungerade Ganzzahl ist, damit es sich wie RoundingMode.CEILING verhält.

<fmt:formatNumber value="${bean.number + (bean.number % 1 == 0 ? 0 : 0.5)}" 
    type="number" pattern="#" /> 
4

Versuchen Sie diesen Code:

<fmt:formatNumber value="${N+(1-(N%1))%1}" type="number" pattern="#"/> 

wobei N der Name Ihres variabel ist.

Grüße

+0

Die gute Sache dieser Methode ist, dass Sie leicht in Boden nur Runden drehen kann es '$ {N- (1- (N% 1))% 1}' durch Veränderung. – AxeEffect

+0

meinst du nicht $ {N- (N% 1)} @AxeEffect? – kacpr