我正在 JSP 中进行除法,我想对结果进行四舍五入 - 我应该怎么做?

IE。

<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的功能,我使用国防部的例子所示。 测试,请,“到期”和“现在”的不同值的变量,应该工作正常。

这个肮脏的黑客怎么样:

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

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

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

请注意,Helpers 提供了一个“getRound()”方法,该方法返回您的 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