■number()関数
()内の引数を数値に変換して返す。文字列なら"NaN"(Not a Number、非数値)が返され、真偽値(ブール値)の場合trueは"1"が、falseは"0"が返される(例5a,b)。
■format-number()関数
・数値を指定した形式(フォーマット)の文字列に変換して出力する。桁区切り、桁揃えなどに利用される。
・書式・・・format-number(数値,"フォーマットパターン文字列","フォーマットパターンの定義名")
・通常は"フォーマットパターンの定義名"は省略し、以下のデフォルトの"フォーマットパターン文字列"を使う。
0 ・・・桁位置をさす、この場所には必ず数値がある。この位置に数値が無い場合"0"を出力する。
# ・・・桁位置をさすが、先頭の0や小数点末尾の0のように数値として 不要な部分は除く。
(0と#は混在できる。整数部分では0の前に、少数部分では0の後に#を記述できる。逆に記述するとエラーに)
. ・・・ピリオド。小数点を表す。
, ・・・カンマ。数値の3桁区切り記号
- ・・・負の記号
% ・・・数値を100倍してパーセントの値として表示。
■フォーマットパターンを制御する<xsl:decimal-format name="定義名" 各属性で定義/>要素
format-number()関数で使用する文字と記号を定義する。format-number()関数の第3引数で定義名を呼び出し使用する。以下の属性で定義できる。
grouping-separator="桁区切り記号でデフォルトはカンマ(,)"
decimal-separator="小数点記号でデフォルトはピリオド(.)"
zero-digit="0を先行さす場合の書式定義用文字でデフォルトは0"
digit="0を先行させない場合の書式定義用文字ででデフォルトは#"
minus-sign="負の数の冒頭に付ける記号でデフォルトは-"
NaN="数値でない場合に表示する内容"
infinity="無限大を示す文字列でデフォルトはInfinity"
percent="パーセント記号でデフォルトは%"
(例14では、フォーマット文字に"x"を、桁区切りに":"を、小数点に"_"を使う)
[サンプルXML文書を表示](下のフレームに)
XMLソース
<?xml version="1.0" encoding="Shift_JIS" ?>
<?xml-stylesheet type="text/xsl" href="number01.xsl"?>
<root>
<title>number()関数とformat-number()関数のテスト</title>
<data>
<test1>35</test1>
<test2>ABC</test2>
<test3>
<samp x="A">25000</samp>
<samp x="B">30000</samp>
<samp x="A">13000</samp>
<samp x="C">40000</samp>
</test3>
</data>
<end>以上です(2004/11/23)</end>
</root>
XSLソース
<?xml version="1.0" encoding="Shift_Jis"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" encoding="Shift_JIS"/>
<xsl:decimal-format name="myFormat" grouping-separator=":" decimal-separator="_"
digit="x" minus-sign=">" NaN="数値じゃないので計算できません!"/>
<xsl:template match="/">
<center><H3><xsl:value-of select="root/title"/></H3></center>
<xsl:apply-templates select="root/data"/>
</xsl:template>
<xsl:template match="data">
(例1a)number(12345)--→ <xsl:value-of select="number(12345)"/><br/>
(例1b)number('12345')--→ <xsl:value-of select="number('12345')"/><br/>
(例1c)number('12,345')--→ <xsl:value-of select="number('12,345')"/><br/>
(例1d)number('12345')--→ <xsl:value-of select="number('12345')"/><br/>
(例1e)number(-123.45)--→ <xsl:value-of select="number(-123.45)"/><br/>
(例2)number(test1)--→ <xsl:value-of select="number(test1)"/><br/>
(例3)number(test1*4-5)--→ <xsl:value-of select="number(test1*4-5)"/><br/>
(例4)number(test2)--→ <xsl:value-of select="number(test2)"/><br/>
(例5a)number(test1=36)--→ <xsl:value-of select="number(test1=36)"/><br/>
(例5b)number(test2='ABC')--→ <xsl:value-of select="number(test2='ABC')"/><br/>
<hr/>
(例6)format-number(.046,'00.0000')--→ <xsl:value-of select="format-number(.046,'00.0000')"/><br/>
(例7)format-number(0.046,'##.####')--→ <xsl:value-of select="format-number(0.046,'##.####')"/><br/>
(例8)format-number(0.046,'##.##')--→ <xsl:value-of select="format-number(0.046,'##.##')"/><br/>
(例9)format-number(1.046,'000.0000')--→ <xsl:value-of select="format-number(1.046,'000.0000')"/><br/>
(例10)format-number(1.046,'###.####')--→ <xsl:value-of select="format-number(1.046,'###.####')"/><br/>
(例11)format-number(1740862.046,'#,###')--→ <xsl:value-of select="format-number(1740862.046,'#,###')"/><br/>
(例12)format-number(1740862.046,'###,###.##')--→ <xsl:value-of select="format-number(1740862.046,'###,###.##')"/><br/>
(例13)format-number(0.358,'#00.00%')--→ <xsl:value-of select="format-number(0.358,'#00.00%')"/><br/>
<hr/>
(例14)format-number(test3/samp[@x="B"],'0,000')--→ <xsl:value-of select="format-number(test3/samp[@x='B'],'0,000')"/><br/>
(例15)format-number(sum(test3/samp[@x="A"]),'0,000')--→ <xsl:value-of select="format-number(sum(test3/samp[@x='A']),'0,000')"/><br/>
(例16)format-number(sum(//samp[@x!=B]),'0,000')--→ <xsl:value-of select="format-number(sum(//samp[@x!='B']),'0,000')"/><br/>
<hr/>
(例17)format-number(-1740862.046,'x:xxx_xx','myFormat')--→ <xsl:value-of select="format-number(-1740862.046,'x:xxx_xx','myFormat')"/><br/>
(例18)format-number('12,345','x:xxx_xx','myFormat')--→ <xsl:value-of select="format-number('12,345','x:xxx_xx','myFormat')"/><br/>
</xsl:template>
</xsl:stylesheet>