<!--
  Copyright 2004 The Apache Software Foundation

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<html>
  <head>
    <title>JSP 2.0 Expression Language - Basic Arithmetic</title>
  </head>
  <body>
    <h1>JSP 2.0 Expression Language - Basic Arithmetic</h1>
    <hr>
    This example illustrates basic Expression Language arithmetic.
    Addition (+), subtraction (-), multiplication (*), division (/ or div), 
    and modulus (% or mod) are all supported.  Error conditions, like
    division by zero, are handled gracefully.
    <br>
    <blockquote>
      <code>
        <table border="1">
          <thead>
	    <td><b>EL Expression</b></td>
	    <td><b>Result</b></td>
	  </thead>
	  <tr>
	    <td>\${1}</td>
	    <td>${1}</td>
	  </tr>
	  <tr>
	    <td>\${1 + 2}</td>
	    <td>${1 + 2}</td>
	  </tr>
	  <tr>
	    <td>\${1.2 + 2.3}</td>
	    <td>${1.2 + 2.3}</td>
	  </tr>
	  <tr>
	    <td>\${1.2E4 + 1.4}</td>
	    <td>${1.2E4 + 1.4}</td>
	  </tr>
	  <tr>
	    <td>\${-4 - 2}</td>
	    <td>${-4 - 2}</td>
	  </tr>
	  <tr>
	    <td>\${21 * 2}</td>
	    <td>${21 * 2}</td>
	  </tr>
	  <tr>
	    <td>\${3/4}</td>
	    <td>${3/4}</td>
	  </tr>
	  <tr>
	    <td>\${3 div 4}</td>
	    <td>${3 div 4}</td>
	  </tr>
	  <tr>
	    <td>\${3/0}</td>
	    <td>${3/0}</td>
	  </tr>
	  <tr>
	    <td>\${10%4}</td>
	    <td>${10%4}</td>
	  </tr>
	  <tr>
	    <td>\${10 mod 4}</td>
	    <td>${10 mod 4}</td>
	  </tr>
    <tr>
      <td>\${(1==2) ? 3 : 4}</td>
      <td>${(1==2) ? 3 : 4}</td>
    </tr>
	</table>
      </code>
    </blockquote>
  </body>
</html>
