Math 如何在JSTL中对数字进行四舍五入?

Math 如何在JSTL中对数字进行四舍五入?,math,jsp,jstl,el,rounding,Math,Jsp,Jstl,El,Rounding,我正在JSP中进行除法运算,我想对结果进行四舍五入-我应该如何做 i、 e …我如何舍入结果 谢谢,这个肮脏的黑客怎么办: <c:set var="expiry" value="${(((expire.time - now.time) / (60 * 1000) * 100) - 0.5) / 100.0}"/> 但我会在一个bean中这样做,并在这里显示结果。除此之外,您还可以(如果您的环境不支持)通过实现映射来获取表达式语言中的函数,并(ab)使用它。您可以实现

我正在JSP中进行除法运算,我想对结果进行四舍五入-我应该如何做

i、 e


…我如何舍入结果


谢谢,

这个肮脏的黑客怎么办:

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

但我会在一个bean中这样做,并在这里显示结果。除此之外,您还可以(如果您的环境不支持)通过实现映射来获取表达式语言中的函数,并(ab)使用它。您可以实现get(Object)方法来执行您想要的操作,并按如下方式调用它:

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

注意,Helpers提供了一个“getRound()”方法,用于返回映射实现。

它可能类似于:

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

${res}
${res}
注意:我认为无论如何都应该使用jstl的mod%功能,我在示例中使用mod。 请测试具有不同值的“expire”和“now”变量应正常工作。

作为替代:

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

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

我使用了:

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

它会截断而不是舍入,但这可能已经足够了。

对于当前的EL版本,您可以使用

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



我同意这个答案。JSTL不应该关心“正确”实现任何逻辑,比如舍入。这是一个中间层的决定。JSP和JSTL应仅用于显示。格式标签是正确的做法。正是我需要的,截断。谢谢注意,在某些语言中,小数点分隔符是逗号(例如西班牙语)
<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) )}"/>