JSTL 数据向上/下取整

JSTL数字格式化:

引入架包 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 

<fmt:formatNumber value="${2.6}" type="number" pattern="#"/>  //返回结果是:3
<fmt:formatNumber value="${2.1}" type="number" pattern="#"/>  //返回结果是:2

从上可知JSTL的数字格式化会对数字进行四舍五入,如果想要实现:上面代码都返回2或者都返回1,也就是向上、向下取整。就需要额外处理,因为JSTL没有JS中的Math.ceil() 和Math.floor()方法,使用以下方法:

//实现向上取整
<fmt:formatNumber value="${2.6 + (2.6 % 1 == 0 ? 0 : 0.5)}" type="number" pattern="#" /> //结果为:3
<fmt:formatNumber value="${2.1 + (2.1 % 1 == 0 ? 0 : 0.5)}" type="number" pattern="#" /> //结果为:3

//实现向下取整
<fmt:formatNumber value="${2.6 + (2.6 % 1 == 0 ? 0 : -0.5)}" type="number" pattern="#" /> //结果为:2
<fmt:formatNumber value="${2.1 + (2.1 % 1 == 0 ? 0 : -0.5)}" type="number" pattern="#" /> //结果为:2


案例:

    现在用户A在参加一个活动,该活动有结束日期,A可以查看现在距离活动结束还有多少天。实现如下:

//截止日期为${endDate}
<jsp:useBean id="now" class="java.util.Date" />  //获取当前时间
<c:set var="timeMis" value="${data.loanLimitedEndTime.time - now.time}"></c:set>
<fmt:formatNumber var="leftDays" value="${timeMis/1000/3600/24+1}"  pattern="#"/>

    使用以上方法计算,就会发现有时候计算的结果刚好正确,有时候计算的结果多一天。排查原因:数字格式化时,进行了四舍五入。而对于实际情况应该是向下取整,不应该执行四舍五入,使用上面讲到的方法修复如下:

//截止日期为${endDate}
<jsp:useBean id="now" class="java.util.Date" />  //获取当前时间
<c:set var="timeMis" value="${data.loanLimitedEndTime.time - now.time}"></c:set>
<c:set var="leftDays" value="${timeMis/1000/3600/24+1}"/>
<fmt:formatNumber var="leftDaysFloor" value="${leftDays+(leftDays%1==0?0:-0.5)}"  pattern="#"/>


转载于:https://my.oschina.net/zyxchuxin/blog/650928

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值