<xsl:decimal-format>  
出力ドキュメントに数値を書き込むときに使用する数値形式を定義します。<decimal-format>name が指定されていない場合は、すべての出力でデフォルトの数値形式が使用されます。数値形式が指定されている場合は、format-number() 関数によって参照されます。
 
カテゴリ

トップレベル要素

 
必須の属性

なし。

 
省略可能な属性
name
この形式に名前を割り当てます。

decimal-separator
小数点として使用する文字 (通常、ピリオドまたはコンマ) を定義します。この文字は、フォーマット文字列と出力の両方で使用されます。初期設定値は、ピリオド ( . ) です。

grouping-separator
千単位区切り文字として使用する文字 (通常、ピリオドまたはコンマ) を定義します。この文字は、フォーマット文字列と出力の両方で使用されます。初期設定値はコンマ ( , ) です。

infinity
無限大を表す文字列を定義します。XSLT では、正の無限大と負の無限大の両方がサポートされています。この文字列は出力でのみ使用されます。初期設定値は文字列 "Infinity" です。

minus-sign
マイナス記号として使用する文字を定義します。この文字は出力でのみ使用されます。初期設定値は、ハイフン ( - 、#x2D) です。

NaN
フォーマットする値が数値ではない場合に表示する文字列を定義します。この文字列は出力でのみ使用されます。初期設定値は文字列 "NaN" です。

percent
パーセント記号として使用する文字を定義します。この文字は、フォーマット文字列と出力の両方で使用されます。初期設定値は、パーセント記号 ( % ) です。

per-mille
千単位記号として使用する文字を定義します。この文字は、フォーマット文字列と出力の両方で使用されます。初期設定値は、Unicode の千単位文字 (#x2030) です。

zero-digit
ゼロとして使用する文字を定義します。この文字は、フォーマット文字列と出力の両方で使用されます。初期設定値はゼロ ( 0 ) です。

digit
数値を表すフォーマット文字列で使用する文字を定義します。初期設定値は、番号記号 ( # ) です。

pattern-separator
パターン内で正と負のサブパターンを区切るために使用する文字を定義します。初期設定値は、セミコロン ( ; ) です。この文字はフォーマット文字列でのみ使用されます。

 
コンテンツ

なし。<xsl:decimal-format> は空の要素です。

 
指定先

<xsl:decimal-format> は、トップレベル要素であり、<xsl:stylesheet> の子としてのみ使用できます。

 
定義先

XSLT 12.3 節「Number Formatting」

 

2 つの <decimal-format> を定義するスタイルシートを次に示します。

<?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 <decimal-format> element:</xsl:text>

    <xsl:value-of select="$newline"/>
    <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>

このスタイルシートを次のドキュメントに対して使用します。

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

スタイルシートを使用してこのドキュメントを処理した結果は次のとおりです。


Tests of the <decimal-format> element:

   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