Fonction format-number() |
Prend un nombre et le formate en chaîne.
Entrées
Le nombre à formater et la chaîne de format sont obligatoires. Le troisième argument correspond au nom facultatif d'un format décimal ; si ce troisième argument n'est pas indiqué, le format décimal par défaut est utilisé.
Sortie
Le nombre, formaté selon les règles fournies par les autres arguments. Les caractères spéciaux utilisés dans le deuxième argument sont les suivants : # Représente un chiffre. Les zéros de tête ou de queue ne sont pas affichés. Formater le nombre 4.0 avec la chaîne " #.## " renvoie la chaîne " 4 ". 0 Représente un chiffre. Contrairement au caractère #, le 0 affiche toujours un zéro. Formater le nombre 4.1 avec la chaîne " #.00 " renvoie la chaîne " 4.10 ". . Représente le point décimal. - Représente le signe moins. , Correspond au séparateur de groupes. ; Sépare les nombres positifs des nombres négatifs. % Indique qu'un nombre devrait être affiché comme pourcentage. La valeur sera multipliée par 100, puis affichée comme un pourcentage. Formater le nombre .76 avec la chaîne " ##% " renvoie la chaîne " 76% " . \u2030 Correspond au caractère Unicode du signe pour mille. La valeur sera multipliée par 1000, puis affichée en pour mille. Formater le nombre .768 avec la chaîne " ###\u2030 " renvoie la chaîne " 768 ". Le troisième argument, le cas échéant, doit correspondre au nom d'un élément <xsl:decimal-format>. L'élément <xsl:decimal-format> permet de définir le caractère à utiliser pour le point décimal et le séparateur de groupes, la chaîne à utiliser pour représenter l'infini ainsi que d'autres options de formatage. Voir <xsl:decimal-format> pour de plus amples informations.
Définie dans
XSLT section 12.3, Formatage des nombres.
Exemple
La feuille de style suivante utilise la fonction format-number() de différentes manières :
    <?xml version="1.0" encoding="ISO-8859-1" ?>
    <xsl:stylesheet version="1.0"
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      xmlns:months="Lookup table for month names">

      <xsl:output method="text"/>

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

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

      <xsl:decimal-format name="f1"
        decimal-separator=":"
        grouping-separator="/"/>

      <xsl:decimal-format name="f2"
        infinity="Really, really big"
        NaN="[not a number]"/>

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

        <xsl:value-of select="$newline"/>
        <xsl:value-of select="$newline"/>
        <xsl:text>   format-number(528.3, '#.#;-#.#')=</xsl:text>
        <xsl:value-of select="format-number(528.3, '#.#;-#.#')"/>
        <xsl:value-of select="$newline"/>
        <xsl:text>   format-number(528.3, '0,000.00;-0,000.00')=</xsl:text>
        <xsl:value-of select="format-number(528.3, '0,000.00;-0,000.00')"/>
        <xsl:value-of select="$newline"/>
        <xsl:text>   format-number(-23528.3, '$#,###.00;($#,###.00)')=</xsl:text>
        <xsl:value-of select="format-number(-23528.3, '$#,###.00;($#,###.00)')"/>
        <xsl:value-of select="$newline"/>
        <xsl:text>   format-number(1528.3, '#/###:00', 'f1')=</xsl:text>
        <xsl:value-of select="format-number(1528.3, '#/###:00;-#/###:00', 'f1')"/>
        <xsl:value-of select="$newline"/>
        <xsl:text>   format-number(1 div 0, '###,###.00', 'f2')=</xsl:text>
        <xsl:value-of select="format-number(1 div 0, '###,###.00', 'f2')"/>
        <xsl:value-of select="$newline"/>
        <xsl:text>   format-number(blue div orange, '#.##', 'f2')=</xsl:text>
        <xsl:value-of select="format-number(blue div orange, '#.##', 'f2')"/>
        <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>     (</xsl:text>
          <xsl:value-of
            select="format-number(miles-flown div sum(//miles-flown), '##%')"/>
          <xsl:text> of all miles flown, </xsl:text>
          <xsl:value-of
            select="format-number(miles-earned div sum(//miles-earned), '##%')"/>
          <xsl:text> of all miles earned.)</xsl:text>
          <xsl:value-of select="$newline"/>
          <xsl:value-of select="$newline"/>
        </xsl:for-each>
        <xsl:text>   Total miles flown: </xsl:text>
        <xsl:value-of select="format-number(sum(//miles-flown), '##,###')"/>
        <xsl:text>, total miles earned: </xsl:text>
        <xsl:value-of select="format-number(sum(//miles-earned), '##,###')"/>
      </xsl:template>

    </xsl:stylesheet>
Ce document XML est utilisé avec la feuille de style :
    <?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>
L'exécution de cette feuille de style permet d'obtenir les résultats suivants :
    Tests of the format-number() function:

       format-number(528.3, '#.#;-#.#')=528.3
       format-number(528.3, '0,000.00;-0,000.00')=0,528.30
       format-number(-23528.3, '$#,###.00;($#,###.00)')=($23,528.30)
       format-number(1528.3, '#/###:00', 'f1')=1/528:30
       format-number(1 div 0, '###,###.00', 'f2')=Really, really big
       format-number(blue div orange, '#.##', 'f2')=[not a number]

       January - 12,379 miles flown, 35,215 miles earned.
         (15% of all miles flown, 15% of all miles earned.)

       February - 32,857 miles flown, 92,731 miles earned.
         (39% of all miles flown, 39% of all miles earned.)

       March - 19,920 miles flown, 76,725 miles earned.
         (24% of all miles flown, 32% of all miles earned.)

       April - 18,903 miles flown, 31,781 miles earned.
         (22% of all miles flown, 13% of all miles earned.)

       Total miles flown: 84,059, total miles earned: 236,452
Ces quelques exemples montrent certaines des options de formatage disponibles les plus complexes, accompagnées de références aux éléments <xsl:decimal-format> de la feuille de style. La dernière section présente une utilisation plus courante de la fonction format-number : le formatage de valeurs données ou calculées à partir d'un document XML.