私はJSPでディビジョンをやっているので、結果を丸めたいのですが、どうすればいいですか?JSTLで番号を丸めるにはどうすればいいですか?
すなわち
<c:set
var="expiry"
value="${(expire.time - now.time)/(60 * 1000)}"/>
...どのように私は結果を丸めるのですか?
おかげで、
私はJSPでディビジョンをやっているので、結果を丸めたいのですが、どうすればいいですか?JSTLで番号を丸めるにはどうすればいいですか?
すなわち
<c:set
var="expiry"
value="${(expire.time - now.time)/(60 * 1000)}"/>
...どのように私は結果を丸めるのですか?
おかげで、
:あなたがローカライズ(コンマとドット)を失うことはありません
<fmt:formatNumber var="expiry"
value="${(expire.time - now.time)/(60 * 1000)}"
maxFractionDigits="0" />
この方法です。
何この汚いハックについて:
<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)メソッドを実装します。
それはルックスも似:
<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"変数の値が違うとうまくいくはずです。代替案として
は、私が使用:
丸めではなく切り捨て${fn:substringBefore(expiry, '.')}
が、それは十分に良いかもしれません。
ちょうど私が必要としたもの、切り詰めます。ありがとう! – Jan
一部の言語では小数点の区切り記号はカンマ(スペイン語など) –
私はこの回答に同意します。 JSTLは、丸めのようなロジックを「適切に」実装することに関わるべきではありません。それは中間層の決定です。 JSPとJSTLは、表示用にする必要があります。フォーマットタグは正しいものです。 – duffymo
現在のロケールに依存することに注意してくださいhttps://stackoverflow.com/a/16899830/1606662 – Chintsu