我试图使用 catch block 捕获以下 jSTL 循环除以零的结果,但我从来没有出现“不适用”,而是抛出“?%”。我正确显示了“等级”。如何显示“不适用”而不是“%”?
<td style="text-align: center;">
<c:set var="grade" value="${(G / (G + L + W + D + A + pc + dc + vc) * 100)}"/>
<c:catch>
<fmt:formatNumber value="${grade}" pattern="0" var="myInteger"/>
<c:set var="passed" value="${myInteger - grade eq 0}"/>
</c:catch>
<c:if test="${passed}">
<fmt:formatNumber minFractionDigits="2" maxFractionDigits="2"
value="${grade}" />%
</c:if>
<c:if test="${not passed}">
Not applicable
</c:if>
</td>
</tr>
</c:forEach>
最佳答案
抛出算术异常的语句不在 JSTL 的 catch block 内(即使用如下逻辑):-
<c:catch var="errorOccurred">
<c:set var="grade" value="${(G / (G + L + W + D + A + pc + dc + vc) * 100)}"/>
</c:catch>
<c:choose>
<c:when test="${errorOccurred != null}">
Not applicable
</c:when>
<c:otherwise>
<fmt:formatNumber value="${grade}" pattern="0" var="myInteger"/>
<c:set var="passed" value="${myInteger - grade eq 0}"/>
<c:choose>
<c:when test="${passed}">
<fmt:formatNumber minFractionDigits="2" maxFractionDigits="2"
value="${grade}" />%
</c:when>
<c:otherwise>
Not applicable
</c:otherwise>
</c:choose>
</c:otherwise>
</c:choose>
关于java - 在 JSTL 中捕获除零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31979110/