XPathとXSLTの関数 【文字列関数】 format-number

2004年07月18日(日)更新


format-numberで数値を指定した表示形式で表示

たけち: 今回は format-numberで数値を指定した表示形式で表示することを学ぼう。

さらら: は〜い。でも、万葉歌だと数値らしいものは特にないわね。

たけち: そうなんだ。だから、今回のサンプルでは万葉歌とは関係の無い例題を載せるね。

さらら: はい。

たけち: じゃ、まず、format-number関数は、どう書くのかをつぎに載せておくね。

  • 書式: 文字列値 format-number(数値, 表示形式, decimal-format名)

decimal-format名

さらら: 数値と表示形式は、言葉としては分かるわ。でも、decimal-format名ってなあに??

たけち: decimal-format名というのは、XSLTの要素のひとつの、decimal-format要素の名前を示すんだ。

さらら: その、decimal-format要素って何を示すの?

たけち: decimal-format要素では次のようなことを指定するんだよ。

  • 小数点を示す文字(デフォルトは、".(ピリオド)")
  • 数字のグループ(1000毎など)を区切る文字(デフォルトは、",(カンマ)")
  • マイナス記号を示すための文字(デフォルトは、"-(マイナス)")

さらら: へぇ〜。じゃあ「表示形式」ではどんなことを??

たけち: 表示形式では、数値をどのように表示するかの表示パターンを指定するんだよ。たとえば、#,###.##って書くと、
「整数部は3桁で区切って表示されて、小数点以下2桁までの数値が表示」されるんだよ。

さらら: あっ、そういった表示パターンなのね。

たけち: decimal-formatの指定と表示形式の指定とで、数値をどのように表示するかを決めるんだよね。でも、通常は、decimal-format名を指定しないことが多いから、今回は省略するね。
詳しいことはdecimal-format要素の箇所で説明することにしようね。まだ作っていないけど・・・(^ ^;

さらら: はい。


format-number関数の使用例

たけち: ここでは、よく使われそうな表示パターンの例を実際に使ってみよう。

さらら: あっ、そうね。そのほうがいいわ。

たけち: 例として、次の【format_numbers.xml】を使ってみよう。

xmlデータ 【format_numbers.xml】

<?xml version="1.0" encoding="Shift_JIS"?>
<?xml-stylesheet type="text/xsl" href="numbers.xsl"?>
<numbers>

<number>-15.001</number>

<number>-14.5</number>

<number>-14.4</number>

<number>-0</number>

<number>0</number>

<number>0.345</number>

<number>1.2345</number>

<number>15.0001</number>

<number>15.9999</number>

</numbers>

さらら: 数字ばかりで、万葉歌じゃないのね。(^ ^;

たけち: うん。。。(^ ^; これらの数字をよく使われそうないくつかのフォーマットで表示させてみよう。次のXSLTスタイルシートを見て。

XSLTスタイルシート 【format_numbers.xsl】

<?xml version="1.0" encoding="Shift_JIS"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/1999/xhtml">

<xsl:template match="/">
  <html>
  <head><title>format-number関数使用例: 各数値を色々なフォーマットで表示します</title></head>
  <body>
  <p>■format-number関数使用例: 各数値を色々なフォーマットで表示します</p>

  <table border="1" width="600">
  <tr><th>元データ</th><th>0.####</th><th>#.0#</th><th>#,###.##</th><th>#,####.0</th><th>0</th><th>0%</th></tr>
  <xsl:apply-templates />
  </table>
    <p align="right">以上です。</p>
  </body>
  </html>
</xsl:template>

<!-- 各数値をformat-numberで表示します -->
<xsl:template match="number">
  <tr>
  <td><xsl:value-of select="text()" /></td>
  <td><xsl:value-of select="format-number(text(), '0.####')" /></td>
  <td><xsl:value-of select="format-number(text(), '#.0#')" /></td>
  <td><xsl:value-of select="format-number(text(), '#,###.##')" /></td>
  <td><xsl:value-of select="format-number(text(), '#,####.0')" /></td>
  <td><xsl:value-of select="format-number(text(), '0')" /></td>
  <td><xsl:value-of select="format-number(text(), '0%')" /></td>
  </tr>
</xsl:template>

</xsl:stylesheet>

さらら: 6つのformat-number(text(), 'xxxxxxx')があるけど、それぞれどういう意味かしら。。。

たけち: 次に簡単に説明しておこうね。

0.####
2文字目に"."(ピリオド)があります。これは小数点の個所を表しています。この小数点の左側(最初の文字)は"0"ですから、整数部の1桁目は必ず数字が表示されます。 小数点以下は、"#"が3つ並んでいますから、小数点以下3桁までの数値が表示されることになります。ただし、小数点以下の数値が0の場合には表示されません。
#.0#
最初の文字は"#"ですから、整数部が0の場合には表示されません。小数点以下は、小数点以下1桁目が"0"ですから、小数点以下1桁は必ず表示されることになります。
#,###.##
小数点を示す"."(ピリオド)のほかに、桁区切り文字を示す","(コンマ)があります。","(コンマ)から"."(ピリオド)まで3つの"#"がありますので、整数部は3桁で区切って表示されます。小数点以下は、"#"が2つ並んでいますから、最大小数点以下2桁までの数値が表示されます。
#,####.0
小数点を示す"."(ピリオド)の後に"0"が指定されているます。したがって、小数点以下1桁の数値が必ず表示されます。
0
"0"だけが指定されています。小数点以下の数字は表示されません。また、桁区切りも表示されません。
0%
パーセントを示す"%"(パーセント記号)の前に、"0"があります。0%の場合も"0%"と表示されます。

たけち: じゃあ、このXSLTスタイルシートを"format_numbers.xsl"というファイルにして、実際にどうなるか見てみようね。次のテキストをクリックしてみて。

数値ばかりのXMLファイル format_numbers.xml(上記説明のXML/XSL適用)

数値を色々な表示形式で表示

さらら: なるほど・・・同じ数値でも、こんなに見せ方があるのね。当たり前のことだけど、普段はあんまり気にしたことがなかったわ。

たけち: うん。そうだよね。じゃぁ、今回はこれでおしまい。

さらら: はい。ありがと。 (*^ ^*)

→つづきます。。。。。 (^ ^;