How do I round a number in JSTL?

后端 未结 5 1503
感情败类
感情败类 2020-12-29 02:39

I\'m doing a division in a JSP and I\'d like to round the result - how should I do this?

i.e.



        
相关标签:
5条回答
  • 2020-12-29 03:05

    It may looks like:

    <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>
    

    note: i think you should use mod anyway or % functionality of jstl,i use mod in example. Test,please, "expire" and "now" variables with different values, should work ok.

    0 讨论(0)
  • 2020-12-29 03:08

    As an alternative:

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

    This way you do not lose localization (commas and dots).

    0 讨论(0)
  • 2020-12-29 03:22

    With the current EL version you can use

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

    or

    <c:set var="expiry"
    value="${Math.floor( (expire.time - now.time) / (60 * 1000) )}"/>
    
    0 讨论(0)
  • 2020-12-29 03:25

    What about this dirty hack:

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

    But I would do this in a bean and just show the result here. Beside this, you can define functions in your tld or, if that is not supported in your environment get functions in the expression language by implementing a Map and (ab)use it. You implement the get(Object) method to do what you want and call it like this:

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

    Note, Helpers provides a "getRound()" method which returns your Map implementation.

    0 讨论(0)
  • 2020-12-29 03:31

    I used:

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

    which truncates rather than rounding, but that may be good enough.

    0 讨论(0)
提交回复
热议问题