<html>
<head>
<title>round() Function</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<div id="Description">
<table cellpadding="0" cellspacing="0" border="0" width="100%" class="main">
<tr>
<td valign="top" class="NAME">round() Function</td>
<td valign="top" class="COMPATIBILITY">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="divider"><img src="dwres:18084" width="100%" height="1"></td>
</tr>
<tr>
<td valign="top" colspan="2" class="description">
Returns the integer closest to the argument.</td></tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Description</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>  If two numbers are equally close to the argument (<span class="LITERAL">1</span> and <span class="LITERAL">2</span> are equally close to <span class="LITERAL">1.5</span>), the number closest to positive infinity is returned. Various argument values are handled as follows:</p>
<ul>
        <dd>If the argument is <span class="LITERAL">NaN</span> (not a number), the <span class="LITERAL">round()</span> function returns <span class="LITERAL">NaN</span>. </p>
        </li>
        <dd>If the argument is positive infinity, then positive infinity is returned. </p>
        </li>
        <dd>If the argument is negative infinity, then negative infinity is returned. </p>
        </li>
        <dd>If the argument is positive zero, then positive zero is returned. </p>
        </li>
        <dd>If the argument is negative zero, then negative zero is returned. </p>
        </li>
        <dd>If the argument is between zero and -0.5, then negative zero is returned. </p>
        </li>
      </ul>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Inputs</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>A number. If the argument is not a number, it is converted to a number as if it were passed to the <span class="LITERAL">number()</span> function. </p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Output</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>The integer that is closest to the argument. Special cases are handled as described in this section. </p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Defined in</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>XPath section 4.4, Number Functions.</p>
</td>
</tr>
<tr>
<td colspan="2" class="CLEARSEPARATION">&nbsp;</td>
</tr>
<tr>
<td colspan="2" class="TITLE">Example</td>
</tr>
<tr>
<td colspan="2" class="description">
<p>The following stylesheet shows the results of invoking the <span class="LITERAL">round()</span> function against a variety of values. We'll use this XML document as input:</p>
<span class="PROGRAMLISTING"><pre>
&lt;?xml version="1.0"?&gt;
&lt;report&gt;
  &lt;title&gt;Miles Flown in 2001&lt;/title&gt;
  &lt;month sequence="01"&gt;
    &lt;miles-flown&gt;12379&lt;/miles-flown&gt;
    &lt;miles-earned&gt;35215&lt;/miles-earned&gt;
  &lt;/month&gt;
  &lt;month sequence="02"&gt;
    &lt;miles-flown&gt;32857&lt;/miles-flown&gt;
    &lt;miles-earned&gt;92731&lt;/miles-earned&gt;
  &lt;/month&gt;
  &lt;month sequence="03"&gt;
    &lt;miles-flown&gt;19920&lt;/miles-flown&gt;
    &lt;miles-earned&gt;76725&lt;/miles-earned&gt;
  &lt;/month&gt;
  &lt;month sequence="04"&gt;
    &lt;miles-flown&gt;18903&lt;/miles-flown&gt;
    &lt;miles-earned&gt;31781&lt;/miles-earned&gt;
  &lt;/month&gt;
&lt;/report&gt;</pre></span>
<p>Here's the stylesheet that uses the <span class="LITERAL">round()</span> function:</p>
<span class="PROGRAMLISTING"><pre>
&lt;?xml version="1.0"?&gt;
&lt;xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:months="Lookup table for month names"&gt;

  &lt;months:name sequence="01"&gt;January&lt;/months:name&gt;
  &lt;months:name sequence="02"&gt;February&lt;/months:name&gt;
  &lt;months:name sequence="03"&gt;March&lt;/months:name&gt;
  &lt;months:name sequence="04"&gt;April&lt;/months:name&gt;
  &lt;months:name sequence="05"&gt;May&lt;/months:name&gt;
  &lt;months:name sequence="06"&gt;June&lt;/months:name&gt;
  &lt;months:name sequence="07"&gt;July&lt;/months:name&gt;
  &lt;months:name sequence="08"&gt;August&lt;/months:name&gt;
  &lt;months:name sequence="09"&gt;September&lt;/months:name&gt;
  &lt;months:name sequence="10"&gt;October&lt;/months:name&gt;
  &lt;months:name sequence="11"&gt;November&lt;/months:name&gt;
  &lt;months:name sequence="12"&gt;December&lt;/months:name&gt;

  &lt;xsl:output method="text"/&gt;

  &lt;xsl:variable name="newline"&gt;
&lt;xsl:text&gt;
&lt;/xsl:text&gt;
  &lt;/xsl:variable&gt;

  &lt;xsl:template match="/"&gt;
    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:text&gt;Tests of the round() function:&lt;/xsl:text&gt;

    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:text&gt;   "round('7.983')" = &lt;/xsl:text&gt;
    &lt;xsl:value-of select="round('7.983')"/&gt;

    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:text&gt;   "round('7.5')" = &lt;/xsl:text&gt;
    &lt;xsl:value-of select="round('7.5')"/&gt;

    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:text&gt;   "round('-7.893')" = &lt;/xsl:text&gt;
    &lt;xsl:value-of select="round('-7.893')"/&gt;

    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:text&gt;   "round('-7.5')" = &lt;/xsl:text&gt;
    &lt;xsl:value-of select="round('-7.5')"/&gt;

    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:text&gt;   "round(/report/month[@sequence='01']/miles-flown)" = &lt;/xsl:text&gt;
    &lt;xsl:value-of select="round(/report/month[@sequence='01']/miles-flown)"/&gt;

    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:text&gt;   "round(document('')/*/months:name[@sequence='02'])" = &lt;/xsl:text&gt;
    &lt;xsl:value-of select="round(document('')/*/months:name[@sequence='02'])"/&gt;

    &lt;xsl:value-of select="$newline"/&gt;
    &lt;xsl:value-of select="$newline"/&gt;
<!--<?troff .Nd 10?>-->
    &lt;xsl:for-each select="/report/month"&gt;
      &lt;xsl:text&gt;   &lt;/xsl:text&gt;
      &lt;xsl:value-of 
        select="document('')/*/months:name[@sequence=current()/@sequence]"/&gt;
      &lt;xsl:text&gt; - &lt;/xsl:text&gt;
      &lt;xsl:value-of select="format-number(miles-flown, '##,###')"/&gt;
      &lt;xsl:text&gt; miles flown, &lt;/xsl:text&gt;
      &lt;xsl:value-of select="format-number(miles-earned, '##,###')"/&gt;
      &lt;xsl:text&gt; miles earned.&lt;/xsl:text&gt;
      &lt;xsl:value-of select="$newline"/&gt;
      &lt;xsl:text&gt;      (Averaged &lt;/xsl:text&gt;
      &lt;xsl:value-of select="round(miles-earned div miles-flown)"/&gt;
      &lt;xsl:text&gt; miles earned for each mile flown.)&lt;/xsl:text&gt;
      &lt;xsl:value-of select="$newline"/&gt;
    &lt;/xsl:for-each&gt;
  &lt;/xsl:template&gt;

&lt;/xsl:stylesheet&gt;</pre></span>
<p>When we process our XML document with this stylesheet, the results are:</p>
<span class="PROGRAMLISTING"><pre>

Tests of the round() function:

   "round('7.983')" = 8
   "round('7.5')" = 8
   "round('-7.893')" = -8
   "round('-7.5')" = -7
   "round(/report/month[@sequence='01']/miles-flown)" = 12379
   "round(document('')/*/months:name[@sequence='02'])" = NaN

   January - 12,379 miles flown, 35,215 miles earned.
      (Averaged 3 miles earned for each mile flown.)

   February - 32,857 miles flown, 92,731 miles earned.
      (Averaged 3 miles earned for each mile flown.)

   March - 19,920 miles flown, 76,725 miles earned.
      (Averaged 4 miles earned for each mile flown.)

   April - 18,903 miles flown, 31,781 miles earned.
      (Averaged 2 miles earned for each mile flown.)
</pre></span>
<p>You can compare these results to those from the <span class="LITERAL">ceiling()</span> and <span class="LITERAL">floor()</span> functions. </p>
</td>
</tr>
</table>
</div>
</body>
</html>