format-number()-Funktion |
Diese Funktion akzeptiert eine Zahl und formatiert sie als String.
Eingaben
Die zu formatierende Zahl. Außerdem ist eine Eingabe des Formatierungsmusters in Form eines Strings erforderlich. Das dritte Argument ist optional und bezeichnet den Namen eines Dezimalformats; fehlt das dritte Argument, wird das Standarddezimalformat verwendet.
Ausgabe
Die nach den Regeln in den anderen Argumenten formatierte Zahl. Im zweiten Argument sind die folgenden Symbole zulässig: # Dieses Symbol steht für eine Ziffer. Nachfolgende oder führende Nullen werden nicht angezeigt. Wird etwa die Zahl 4.0 gemäß dem String " #.## " formatiert, wird der String " 4 " zurückgegeben. 0 Steht ebenfalls für eine Ziffer. Im Gegensatz zu dem Symbol # , werden bei Verwendung von 0 auch die Nullen angezeigt. Wird etwa die Zahl 4.1 gemäß dem String " #.00 " formatiert, wird der String " 4.10 " zurückgegeben. . Dieses Symbol steht für das Dezimalzeichen. - Dieses Symbol repräsentiert das Minuszeichen. , Das Tausendertrennzeichen. ; Dient als Trennzeichen zwischen dem Muster für positive Zahlen und dem Muster für negative Zahlen. % Dieses Symbol bewirkt, dass eine Zahl als Prozentwert angezeigt werden soll. Der Wert wird mit 100 multipliziert und dann als Prozentwert angezeigt. Wird etwa die Zahl .76 gemäß dem String " ##% " formatiert, wird der String " 76% " zurückgegeben. \u2030 Das Unicode-Zeichen für das Promillezeichen (pro Tausend). Der Wert wird mit 1000 multipliziert und dann als Promillewert angezeigt. Wird etwa die Zahl .768 gemäß dem String " ###\u2030 " formatiert, wird der String " 768 " zurückgegeben. Wird das dritte Argument angegeben, muss es dem Namen eines <xsl:decimal-format>-Elements entsprechen. Das Element <xsl:decimal-format> erlaubt die Definition des Dezimalzeichens und des Tausendertrennzeichens sowie des Unendlichkeitszeichens und weiterer Formatierungsoptionen. Weitere Informationen finden Sie unter <xsl:decimal-format>.
Definition
XSLT-Abschnitt 12.3, Zahlenformatierung.
Beispiel
Das folgende Stylesheet verwendet die Funktion format-number() in verschiedener Weise:
    <?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>
Das Stylesheet wird auf das folgende XML-Dokument angewendet:
    <?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>
Hier die Ergebnisse, die entstehen, wenn dieses Stylesheet ausgeführt wird:
    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
Die ersten paar Beispiele veranschaulichen einige der komplizierteren Formatierungsoptionen, in Verbindung mit Verweisen auf die <xsl:decimal-format>-Elemente im Stylesheet. Der letzte Abschnitt entspricht eher dem typischen Einsatzgebiet der Funktion format-number: dem Formatieren von Werten, die aus einem XML-Dokument ausgewählt oder berechnet wurden.