33

JSPで除算を行っていますが、結果を丸めたいのですが、これはどのようにすればよいですか?

すなわち

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

...結果を丸めるにはどうすればよいですか?

ありがとう、

4

5 に答える 5

58

別の方法として:

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

このようにして、ローカリゼーション(コンマとドット)を失うことはありません。

于 2009-09-18T09:44:57.037 に答える
10

私が使用した:

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

これは丸めではなく切り捨てられますが、それで十分かもしれません。

于 2009-11-03T16:53:21.830 に答える
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」変数は正常に機能するはずです。

于 2009-09-18T09:38:14.020 に答える
1

この汚いハックはどうですか?

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

しかし、私はこれをBeanで行い、結果をここに表示します。これに加えて、tldで関数を定義するか、それが環境でサポートされていない場合は、Mapを実装して(ab)使用することにより、式言語で関数を取得できます。get(Object)メソッドを実装して、必要なことを実行し、次のように呼び出します。

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

Helpersは、Map実装を返す「getRound()」メソッドを提供していることに注意してください。

于 2009-09-18T09:19:29.143 に答える
1

現在の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) )}"/>
于 2019-04-11T20:22:19.580 に答える