XML | XML-Schema | XPath | XSL-T | XSL-FO | XQuery | XProc | SVG |
XSL-T / Die XSLT - Struktur / xsl:decimal-format
![]() |
![]() |
➪ xsl:decimal-format erlaubt eine benutzerdefinierte Zahlen-Formatierung: Für Dezimaltrenner (z.B. Komma) und Gruppierungszeichen (z.B. Punkt) können Sonderzeichen festgelegt werden (z.B. 1.234.567,89), die vom Standardwert (z.B. 1,234,567.89) abweichen. xsl:decimal-format kommt optional zum Einsatz in der XPath-Funktion format-number.
Vergleiche
Die XPath-Funktion format-number erwartet mindestens zwei, optional drei Parameter. Der erste Parameter muss aus einer Zahl bestehen, der zweite Parameter ist ein Pattern zur formatierten Darstellung dieser Zahl. So ergibt der Aufruf dieses Templates
<xsl:template match="/">
<ergebnis>
<xsl:for-each select="-10000001, -1001, -100, -11, -9,
0, 9, 10, 99, 100, 999, 1000, 10000001">
<wert>
<xsl:value-of select="format-number(., '#,##0.00')"/>
</wert>
</xsl:for-each>
</ergebnis>
</xsl:template>
... dieses Ergebnis:
<ergebnis>
<wert>-10,000,001.00</wert>
<wert>-1,001.00</wert>
<wert>-100.00</wert>
<wert>-11.00</wert>
<wert>-9.00</wert>
<wert>0.00</wert>
<wert>9.00</wert>
<wert>10.00</wert>
<wert>99.00</wert>
<wert>100.00</wert>
<wert>999.00</wert>
<wert>1,000.00</wert>
<wert>10,000,001.00</wert>
</ergebnis>
decimal-separator | stellt den Dezimaltrenner zwischen Vor- und Nachkommastellen dar. Default-Wert: der Punkt ".". Beispiel: 1234.56 |
digit | ist ein Platzhalter für Zeichen, die (im Gegensatz zur 0 als zero-digit-Platzhalter) nur bei Bedarf verwendet werden. Ist das Pattern '0.000,00', so wird die Zahl '12.6' als '0.012,60' ausgegeben. Bei Verwendung des Patters '#.##0,00' erscheint die Zahl als '12,60'. Der Default-Wert ist "#". |
grouping-separator | stellt den Gruppierungs-Trenner dar, etwa in der Tausendergruppierung. Default-Wert: Komma ",". Beispiel: 1,234,567 |
minus-sign | wird bei einer negativen Zahl verwendet. Default-Wert ist das Minuszeichen "-". |
name | hier kann der xsl:decimal-format benannt werden, sodass er in der format-number-Funktion verwendet werden kann. Beispiel: format-number(., '#.##0,00', 'df'). Dann muss das Pattern ('#.##0,00') aber auch zu den Definitionen des xsl:decimal-format passen. |
pattern-separator | ist ein Trennzeichen für mögliche Sub-Patterns. Beispiel: '#.##0;#,0000'. Default ist das Semikolon ";". |
percent | definiert den Prozentwert einer Zahl, nachdem sie mit 100 multipliziert wurde. Beispiel: '0.05' ergibt '5%'. Default ist "%". |
zero-digit | ist der Platzhalter für ggf. nicht vorhandene Stellen, die als '0' dargestellt werden sollen. Beispiel: bei '0.000,00' wird die Zahl '12.6' als '0.012,60' ausgegeben. Default ist die Null "0". |
Die globale Definition eines xsl:decimal-format-Elements (es muss ein Childnode des Root-Elements xsl:stylesheet bzw. xsl:transform sein) erlaubt diverse Umformatierungen, sodass der Dezimaltrenner ein Komma wird, die Gruppierungen jedoch mit dem Punkt ...
<xsl:decimal-format
name="df"
decimal-separator=","
grouping-separator="."
minus-sign="-"
digit="#"/>
... sowie der Aufruf dieser benannten Formatanweisung als dritten Parameter in format-number ...
<xsl:value-of select="format-number(., '#.##0,00', 'df')"/>
... ergibt vorerst dieses Resultat:
<ergebnis>
<wert>-10.000.001,00</wert>
<wert>-1.001,00</wert>
<wert>-100,00</wert>
<wert>-11,00</wert>
<wert>-9,00</wert>
<wert>0,00</wert>
<wert>9,00</wert>
<wert>10,00</wert>
<wert>99,00</wert>
<wert>100,00</wert>
<wert>999,00</wert>
<wert>1.000,00</wert>
<wert>10.000.001,00</wert>
</ergebnis>
Daneben ist es möglich, auch andere Werte für das Minuszeichen ("M") bzw. für den Platzhalter ("W") vorzugeben.
<xsl:decimal-format
name="df"
decimal-separator=","
grouping-separator="."
minus-sign="M"
digit="W"/>
Mit dem Aufruf von
<xsl:value-of select="format-number(., 'W.WW0,00', 'df')"/>
... ändert sich umgehend das Ergebnis:
<ergebnis>
<wert>M10.000.001,00</wert>
<wert>M1.001,00</wert>
<wert>M100,00</wert>
<wert>M11,00</wert>
<wert>M9,00</wert>
<wert>0,00</wert>
<wert>9,00</wert>
<wert>10,00</wert>
<wert>99,00</wert>
<wert>100,00</wert>
<wert>999,00</wert>
<wert>1.000,00</wert>
<wert>10.000.001,00</wert>
</ergebnis>
Sie möchten das Euro-Zeichen mit ausgeben? Kein Problem:
<xsl:value-of select="format-number(., 'W.WW0,00 €', 'df')"/>
Interessant ist auch die Arbeit mit verschiedenen Patterns, die über den pattern-separator getrennt werden können.
<xsl:decimal-format
name="df"
decimal-separator=","
grouping-separator="."
minus-sign="M"
digit="W"
pattern-separator=";"/>
Damit spricht format-number verschiedene Patterns an.
<xsl:value-of
select="format-number(., 'W.WW0;W,0000', 'df')"/>
Die Ausgabe sieht dann so aus:
<ergebnis>
<wert>10000001,0000</wert>
<wert>1001,0000</wert>
<wert>100,0000</wert>
<wert>11,0000</wert>
<wert>9,0000</wert>
<wert>0</wert>
<wert>9</wert>
<wert>10</wert>
<wert>99</wert>
<wert>100</wert>
<wert>999</wert>
<wert>1.000</wert>
<wert>10.000.001</wert>
</ergebnis>
wg / 17. April 2021
Fragen? Anmerkungen? Tipps?
Bitte nehmen Sie Kontakt zu mir auf.
V.i.S.d.P.: Wilfried Grupe * Klus 6 * 37643 Negenborn
☎ 0151. 750 360 61 * eMail: info10@wilfried-grupe.de