質問

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

i.e。

<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を使用します。 テストしてください、「期限切れ」および「今」異なる値を持つ変数は問題なく動作するはずです。

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

<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)]"/>

注、ヘルパーは&quot; getRound()&quot;を提供します。 Map実装を返すメソッド。

現在の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) )}"/>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top