Fonction round()  
Renvoie le nombre entier le plus proche de l'argument.
 
Description

Si deux nombres sont aussi proches l'un que l'autre de l'argument (1 et 2 sont aussi proches l'un que l'autre de 1.5), le nombre le plus proche de l'infini positif est renvoyé. Les différentes valeurs d'argument sont gérées comme suit :

    Si l'argument correspond à la valeur NaN (qui n'est pas un nombre), la fonction round() renvoie la valeur NaN.

    Si l'argument correspond à l'infini positif, l'infini positif est alors renvoyé.

    Si l'argument correspond à l'infini négatif, l'infini négatif est alors renvoyé.

    Si l'argument correspond au zéro positif, le zéro positif est alors renvoyé.

    Si l'argument correspond au zéro négatif, le zéro négatif est alors renvoyé.

    Si l'argument est compris entre zéro et -0.5, le zéro négatif est alors renvoyé.

 
Entrées

Un nombre. Si l'argument n'est pas un nombre, il est converti en nombre comme si la fonction number() lui avait été appliquée.

 
Sortie

Le nombre entier le plus proche de l'argument. Les cas particuliers sont gérés comme décrit dans la présente section.

 
Définie dans

XPath section 4.4, Fonctions Nombre.

 
Exemple

La feuille de style suivante présente les résultats de l'invocation de la fonction round() en fonction de plusieurs valeurs. Le document XML suivant a servi d'entrée :

<?xml version="1.0"?>
<report>
  <title>Miles Flown in 2001</title>
  <month sequence="01">
    <miles-flown>12379</miles-flown>
    <miles-earned>35215</miles-earned>
  </month>
  <month sequence="02">
    <miles-flown>32857</miles-flown>
    <miles-earned>92731</miles-earned>
  </month>
  <month sequence="03">
    <miles-flown>19920</miles-flown>
    <miles-earned>76725</miles-earned>
  </month>
  <month sequence="04">
    <miles-flown>18903</miles-flown>
    <miles-earned>31781</miles-earned>
  </month>
</report>

La feuille de style suivante utilise la fonction round() :

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:months="Lookup table for month names">

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

  <xsl:output method="text"/>

  <xsl:variable name="newline">
<xsl:text>
</xsl:text>
  </xsl:variable>

  <xsl:template match="/">
    <xsl:value-of select="$newline"/>
    <xsl:text>Tests of the round() function:</xsl:text>

    <xsl:value-of select="$newline"/>
    <xsl:value-of select="$newline"/>
    <xsl:text>   "round('7.983')" = </xsl:text>
    <xsl:value-of select="round('7.983')"/>

    <xsl:value-of select="$newline"/>
    <xsl:text>   "round('7.5')" = </xsl:text>
    <xsl:value-of select="round('7.5')"/>

    <xsl:value-of select="$newline"/>
    <xsl:text>   "round('-7,893')" = </xsl:text>
    <xsl:value-of select="round('-7,893')"/>

    <xsl:value-of select="$newline"/>
    <xsl:text>   "round('-7,5')" = </xsl:text>
    <xsl:value-of select="round('-7,5')"/>

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

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

    <xsl:value-of select="$newline"/>
    <xsl:value-of select="$newline"/>

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

</xsl:stylesheet>

Une fois le document XML traité à l'aide de la feuille de style, les résultats sont les suivants :


Tests of the round() function:

   "round('7.983')" = 8
   "round('7.983')" = 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.)

Ces résultats peuvent être comparés à ceux de la fonction ceiling() et de la fonction floor().