문제

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>

참고 : 사용해야한다고 생각합니다 모드 어쨌든 또는 % JSTL의 기능은 예제에서 mod를 사용합니다. 테스트, 제발, "만료"및 "지금"변수가 다른 값을 가진 변수는 잘 작동합니다.

이 더러운 해킹은 어떻습니까 :

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

그러나 나는 이것을 콩으로하고 여기에 결과를 보여줄 것입니다. 이것 외에, 당신은 할 수 있습니다 TLD의 기능을 정의하십시오 또는 그것이 당신의 환경에서 지원되지 않으면 맵을 구현하여 표현식 언어에서 기능을 얻고 (ab) 사용하십시오. 당신은 당신이 원하는 것을 수행하기 위해 get (Object) 메소드를 구현하고 다음과 같이 부릅니다.

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

Helpers는 "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) )}"/>
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top