[1] XSLT の関数
文字列
(<http://www.w3.org/TR/xslt#function-format-number>)
を使うと、任意の数値を任意の書式で表現したものを得ることが出来ます。format-number
(数値, 文字列, 修飾名?)
第1引数が対象の数値, 第2引数が適用する書式文字列, 第3引数が十進数書式 (decimal‐format) の名前です。 省略時は既定のものとなります。
第3引数で指定されている修飾名が
xslt:decimal-format
要素で定義されていないなら誤りです。
[2] 第2引数の書式は、
java.text.DecimalFormat
で使われているものです。
仕様書には Java での実装を強要するものではないとか書いていますが、一方で書式が JDK の文書参照になっているとかいう依存ぶり。
ちなみに XSLT 2.0 WD ではパワーアップしたものがちゃんと仕様書内で規定されています。
パターン := 部分パターン [部分パターン分離子 部分パターン]
部分パターン := [接頭辞] 整数部 [小数点 小数部
接頭辞 := 字句
接尾辞 := 字句
整数部 := [数字符 *([集団分離子] 数字符)] *([集団分離子] 零数字) 零数字 ;; J2SE 1.4 では # だけでも OK だけど、 JDK 1.1 では必ず1の位が 0 でないといけない。
小数部 := *零数字 *数字符
字句 := 1*(字句文字 / 引用文字列)
字句文字 := 文字 − 特殊文字
引用文字列 := "'" 1*文字 "'" / ""
特殊文字 := 零数字 / 数字符 / 小数点 / 集団分離子 / 部分パターン分離子 / 負符号 / 百分率記号 / 千分率記号 / 通貨記号 / "'"
通貨記号 := <[U+00A4]>
文字 := <[U+0000‐U+FFFD]>
国際通貨記号は指定された通貨記号に置換されるのですが、
JDK 1.1 の初期版では対応していないとかいうすごい理由ではずされています。
(しかも format pattern must not contain って書いてあるんだけど、それじゃあ quote しても駄目なんだろうか。。。それはひどすぎるような。)
で、 U+10000
以上の文字が使えないという JDK
1.1 の制限は XSLT にも適用されるんですかね?
やってらんない。。。
[4] 以下の例では、既定の特殊文字が使われているとします。
¥
と1桁以上の整数 : 2→¥2, 3.14→¥3, 100→¥100, -100→-¥100円
#
と5桁以上の整数▲
つき。%
。2→200%, 3.14→314%, 0.001→000%‰ =
と、元の数を千倍して、1桁以上の整数。2→‰ = 2000, 3.14→‰ = 3140, 0.001→‰ = 1[6] ものがたり (diary for AtsushiEno) - bug in JDK? java.text.DecimalFormat <http://d.hatena.ne.jp/atsushieno/20050606/p1> (名無しさん [sage] 2005-06-06 23:03:02 +00:00)