2009-09-18 17 views

答えて

54

:あなたがローカライズ(コンマとドット)を失うことはありません

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

この方法です。

+2

私はこの回答に同意します。 JSTLは、丸めのようなロジックを「適切に」実装することに関わるべきではありません。それは中間層の決定です。 JSPとJSTLは、表示用にする必要があります。フォーマットタグは正しいものです。 – duffymo

+0

現在のロケールに依存することに注意してくださいhttps://stackoverflow.com/a/16899830/1606662 – Chintsu

1

何この汚いハックについて:

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

しかし、私は、Beanでこれを行うと、ちょうどここに結果が表示されるでしょう。これ以外にも、define functions in your tldがあります。また、環境でサポートされていない場合は、マップを実装して式言語で関数を取得し、(ab)を使用します。

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

注意、ヘルパーがあなたのマップの実装を返します「getRound()」メソッドを提供します:あなたは、あなたがやりたいと、このようにそれを呼び出すために取得(Object)メソッドを実装します。

2

それはルックスも似:

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

注:私はあなたがとにかくMODやJSTLの機能を使用すべきだと思う、私は例のMODを使用しています。 テストしてください。 "expire"と "now"変数の値が違うとうまくいくはずです。代替案として

8

は、私が使用:

丸めではなく切り捨て
${fn:substringBefore(expiry, '.')} 

が、それは十分に良いかもしれません。

+0

ちょうど私が必要としたもの、切り詰めます。ありがとう! – Jan

+2

一部の言語では小数点の区切り記号はカンマ(スペイン語など) –

関連する問題