如何在 JSTL 中对数字进行四舍五入?
题
我正在 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) )}"/>
不隶属于 StackOverflow