在 JSTL 中捕获除以零

Catch division by zero in JSTL

我正在尝试使用 catch 块通过以下 jstl 循环捕获被零除,但我从来没有 'Not applicable' 但它抛出 '?%'。我得到 'grade' 正确显示。如何显示 'Not applicable' 而不是 '%?'?

  <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 块内(i.e.Use 如下逻辑):-

  <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>