目次へ

6.3 数字のフォーマット

string format-number(number, string, string?)

format-number 関数は、指定されたフォーマットパターン文字列を使用し、指定された数値を文字列に変換します。1番目の引数は必須であり、変換したい数値を指定します。2番目の引数も必須であり、フォーマットパターン文字列を指定します。省略可能である 3番目の引数については後述します。フォーマットパターン文字列は JDK 1.1 の DecimalFormat クラスが規定する構文で表されます。

フォーマットパターン文字列には、先行するゼロと後続するゼロを出力するかどうか、数値の少数部分を出力するかどうか等を指定します。

  • 整数部分は必要なだけ多くの数字を含む。
  • 数字 3つ置きにグループ区切り文字で区切る。
  • 整数部分がゼロである少数の場合は、小数点の前にゼロを一つ置く。
  • 小数点以下は 3桁まで出力する。ただし、小数第一位を除きゼロは出力しない。

たとえば、上記の条件を満たすフォーマットパターン文字列は以下の通りです。

#,##0.0##

デフォルトでは、上記のような表記方法になりますが、会計処理の時などにはマイナスの符号を "▲" で出力したいときや、複数のパターンを使い分けたいこともあるかもしれません。そういった際にはトップレベル要素である xsl:decimal-format 要素を使用して、デシマルフォーマットを定義します。

<xsl:decimal-format
  name = qname
  decimal-separator = char
  grouping-separator = char
  infinity = string
  minus-sign = char
  NaN = string
  percent = char
  per-mille = char
  zero-digit = char
  digit = char
  pattern-separator = char /> 

属性はすべて任意指定であり、指定するものは以下のようになります。

属性 内容 デフォルト
name ここで指定された名前によって、format-number 関数は、使用する xsl:decimal-format 要素を特定します。
デフォルトのデシマルフォーマットを確立
decimal-separator 小数点記号として使用する文字
ピリオド "."
grouping-separator 数字を何桁置きかで区切る文字
コンマ ","
infinity 無限大を表すために使う文字列
Infinity
minus-sign デフォルトのマイナス記号として使う文字
ハイフン "-"
NaN NaN 型の値を表すために使う文字列
NaN
percent パーセント記号として使う文字
%
per-mille パーミル (千分率) 記号として使う文字
zero-digit 数表記用数字のゼロに使う文字
ゼロ "0"
digit フォーマットパターンに含まれる数字の表記に使う文字
#
pattern-separator パターン内のプラスのサブパターンとマイナスのサブパターンを区切るために使う文字
セミコロン ";"

name 属性を持つデシマルフォーマットを使用するときは format-number 関数の 3番目の引数に使用したいデシマルフォーマットの名前を指定します。また、同一の名前を持つ xsl:decimal-format 要素を宣言することはできません。

<root>
  <number>1000</number>
  <number>-1000</number>
  <number>0.1</number>
</root>
<xsl:decimal-format name="myFormat" grouping-separator="," minus-sign="▲" />
<xsl:template match="root">
  <root>
    <xsl:for-each select="number">
      <number>
        <xsl:value-of select="format-number(., ',##0.0##')"/> =
        <xsl:value-of select="format-number(., ',##0.###', 'myFormat')"/>
      </number>
    </xsl:for-each>
  </root>
</xsl:template>

上の XML 文書に下のスタイルシートを適用すると以下の出力を得ます。

<root>
  <number>1,000.0 = 1,000</number>
  <number>-1,000.0 = ▲1,000</number>
  <number>0.1 = 0.1</number>
</root>

↑このページの先頭へ

こちらもチェック!

PR
  • XMLDB.jp