在我下面的代码中,它返回了一个来自第三列的异常。有没有更好的方法来编写此逻辑以防止发生异常?这是正在发生的异常:由 (#2):java.lang.ArithmeticException: / 零引起
这是可能导致问题的代码: 所以所有的客户都显示一个大于“0”的数字,所以使用第一个语句。在某些情况下,其他声明中的客户返回为“0”。因此,对于模数,您不能将数字除以“0”,因此会引发异常。写这个语句的更好方法是什么?
<c:choose>
<c:when test="${total%columns != 0}">
<c:set var="columnL" value="${total/columns + 1}"/>
<c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
</c:when>
<c:otherwise>
<c:set var="columnL" value="${total/columns}"/>
<c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
</c:otherwise>
</c:choose>
每个请求添加的调试:1. ${Total%columns != 0}
2. ${Total/columns + 1}
3. ${Total/columns}
添加了调试,并且 1 部分返回为:1. true, 2. 11.333333333333334, 3. 10.333333333333334
另一部分又回来了:(这就是导致问题的原因)1. false, 2. 9.0, 3. 8.0
正如您所注意到的,看起来两者之间正在生成浮点数,这会导致异常。
这是完整代码的概述。
<dsp:page>
<c:set var="total" value="${fn:length(customers)}"/>
<c:set var="columns" value="3"/>
<c:set var="cCount" value="1"/>
<c:choose>
<c:when test="${total%columns != 0}">
<c:set var="columnL" value="${total/columns + 1}"/>
<c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
</c:when>
<c:otherwise>
<c:set var="columnL" value="${total/columns}"/>
<c:set var="columnL" value="${fn:substringBefore(columnL, '.')}"/>
</c:otherwise>
</c:choose>
<c:forEach begin="1" end="${columns}" var="cCount" varStatus="status">
<c:set var="begin" value="${(cCount -1) * columnL}"/>
<c:choose>
<c:when test="cCount == columns">
<c:set var="end" value="${total - 1}"/>
</c:when>
<c:otherwise>
<c:set var="end" value="${(cCount) * columnL - 1}"/>
</c:otherwise>
</c:choose>
<div id="dColumn${cCount}" class="dCol">
<c:set var="cCount" value="${cCount+1}"/>
<c:forEach items="${customers}" begin="${begin}" end="${end}" var="customer" varStatus="status">
<div class="link">
<nm:a href="${customer.templateURL}">
<dsp:param name="param1" value="${customer.id}" />
<dsp:param name="param2" value="${customer.parentId}" />
<dsp:param name="param3" value="${customer.masterId}" />
</nm:a>
</div>
</c:forEach>
</div>
</c:forEach>
</dsp:page>