如何在JSTL中舍入数字?

时间:2009-09-18 09:12:46

标签: math jsp jstl el rounding

我正在JSP中进行划分,我想对结果进行舍入 - 我该怎么做?

即。

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

...我如何围绕结果?

谢谢,

5 个答案:

答案 0 :(得分:55)

作为替代方案:

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

这样你就不会失去本地化(逗号和点)。

答案 1 :(得分:9)

我用过:

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

截断而不是舍入,但这可能足够好。

答案 2 :(得分: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。 请测试具有不同值的“过期”和“现在”变量,应该可以正常工作。

答案 3 :(得分:1)

这个肮脏的黑客怎么样:

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

但是我会在bean中执行此操作并在此处显示结果。除此之外,您可以define functions in your tld或者,如果您的环境不支持,则可以通过实现Map和(ab)使用它来获取表达式语言中的函数。您可以实现get(Object)方法来执行您想要的操作并按以下方式调用它:

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

注意,Helpers提供了一个“getRound()”方法,它返回Map实现。

答案 4 :(得分:0)

您可以使用当前的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) )}"/>