我正在 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 的%功能,我在示例中使用 mod。请测试,具有不同值的“过期”和“现在”变量应该可以正常工作。
这个肮脏的黑客怎么样:
<c:set
var="expiry"
value="${(((expire.time - now.time) / (60 * 1000) * 100) - 0.5) / 100.0}"/>
但我会在 bean 中执行此操作,并在此处显示结果。除此之外,您可以在您的 tld 中定义函数,或者,如果您的环境不支持,则通过实现 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) )}"/>