我正在做一个JSP的部门,我想要结果 - 我该怎么做?如何在JSTL中对数字进行舍入?
即
<c:set
var="expiry"
value="${(expire.time - now.time)/(60 * 1000)}"/>
...我怎么圆,结果呢?
感谢,
我正在做一个JSP的部门,我想要结果 - 我该怎么做?如何在JSTL中对数字进行舍入?
即
<c:set
var="expiry"
value="${(expire.time - now.time)/(60 * 1000)}"/>
...我怎么圆,结果呢?
感谢,
作为替代方案:
<fmt:formatNumber var="expiry"
value="${(expire.time - now.time)/(60 * 1000)}"
maxFractionDigits="0" />
这样你就不会失去本地化(逗号和点)。
那这肮脏的黑客:
<c:set
var="expiry"
value="${(((expire.time - now.time)/(60 * 1000) * 100) - 0.5)/100.0}"/>
但我会做到这一点的豆,只是显示结果在这里。除此之外,您可以define functions in your tld或者,如果您的环境中不支持该功能,则通过实现Map和(ab)使用它来获取表达式语言中的函数。您可以实现的get(Object)方法做你想要什么,这样称呼它:
<c:set
var="expiry"
value="${Helpers.round[(expire.time - now.time)/(60 * 1000)]"/>
注意,助手提供了一个“getRound()”方法,它返回的Map实现。
它可能看起来像:
<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。 测试,请用不同的值“过期”和“现在”变量,应该工作正常。
我用:
${fn:substringBefore(expiry, '.')}
其截断,而不是四舍五入,但可能是不够好。
正是我所需要的,截断。谢谢! – Jan 2012-06-15 09:53:23
请注意,在某些语言中,小数点分隔符是逗号(例如西班牙语) – 2014-07-15 16:39:43
我同意这个答案。 JSTL不应该关心“恰当地”执行任何逻辑如舍入。这是一个中间层次的决定。 JSP和JSTL只能用于显示。格式标记是正确的事情。 – duffymo 2009-09-18 09:59:43
小心它取决于当前的区域设置https://stackoverflow.com/a/16899830/1606662 – Chintsu 2017-12-15 13:09:49