私はJSPで分割を行っていますが、結果を丸めたいのですが、どうすればよいですか?
つまり.
<c:set
var="expiry"
value="${(expire.time - now.time) / (60 * 1000)}"/>
...結果を丸めるにはどうすればよいですか?
ありがとう、
代替として:
<fmt:formatNumber var="expiry"
value="${(expire.time - now.time) / (60 * 1000)}"
maxFractionDigits="0" />
これにより、ローカライズ(コンマとドット)が失われません。
私が使用した:
${fn:substringBefore(expiry, '.')}
これは丸めではなく切り捨てますが、それで十分かもしれません。
次のようになります。
<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」をテストしてください、大丈夫です。
この汚いハックはどうですか:
<c:set
var="expiry"
value="${(((expire.time - now.time) / (60 * 1000) * 100) - 0.5) / 100.0}"/>
しかし、私はこれをBeanで行い、結果をここに示します。これに加えて、 TLDで関数を定義 を使用できます。または、環境でサポートされていない場合は、Mapを実装して(ab)useを使用して式言語の関数を取得します。 get(Object)メソッドを実装して、必要な処理を行い、次のように呼び出します。
<c:set
var="expiry"
value="${Helpers.round[(expire.time - now.time) / (60 * 1000)]"/>
ヘルパーは、Map実装を返す「getRound()」メソッドを提供します。
現在のELバージョンでは、使用できます
<c:set var="expiry"
value="${Math.round( (expire.time - now.time) / (60 * 1000) )}"/>
または
<c:set var="expiry"
value="${Math.floor( (expire.time - now.time) / (60 * 1000) )}"/>