format-number

format-number

[1] XSLT の関数 文字列 format-number (数値, 文字列, 修飾名?) (<http://www.w3.org/TR/xslt#function-format-number>) を使うと、任意の数値を任意の書式で表現したものを得ることが出来ます。

第1引数が対象の数値, 第2引数が適用する書式文字列, 第3引数が十進数書式 (decimal‐format) の名前です。 省略時は既定のものとなります。

第3引数で指定されている修飾名が xslt:decimal-format 要素で定義されていないなら誤りです。

[2] 第2引数の書式は、 java.text.DecimalFormat で使われているものです。 仕様書には Java での実装を強要するものではないとか書いていますが、一方で書式が JDK の文書参照になっているとかいう依存ぶり。

ちなみに XSLT 2.0 WD ではパワーアップしたものがちゃんと仕様書内で規定されています。

[3]

国際通貨記号は指定された通貨記号に置換されるのですが、 JDK 1.1 の初期版では対応していないとかいうすごい理由ではずされています。 (しかも format pattern must not contain って書いてあるんだけど、それじゃあ quote しても駄目なんだろうか。。。それはひどすぎるような。) で、 U+10000 以上の文字が使えないという JDK 1.1 の制限は XSLT にも適用されるんですかね? やってらんない。。。

[4] 以下の例では、既定の特殊文字が使われているとします。

0
1桁以上の整数。 2→2, 3.14→3 (丸め), 10→10 (整数最大桁数は設定されない), -10→-10 (既定の負接頭辞 = 負符号)
00
2桁以上の整数。 2→02 (零埋), 3.14→03, 10→10, 100→100
#0
1桁以上の整数 (0 と同義)
0.0
1桁以上の整数部と1桁の小数部。 2→2.0, 3.14→3.1 (丸め), 10→10.0
0.#
1桁以上の整数部と0桁または1桁の小数部。 2→2, 3.14→3.1, 10→10
0.0#
1桁以上の整数部と2桁以下の小数部。 2→2.0, 3.14→3.14, 3.1415→3.14, 10→10.0
¥0
接頭辞¥と1桁以上の整数 : 2→¥2, 3.14→¥3, 100→¥100, -100→-¥100
00円
2桁以上の整数と接尾辞円
'#'00000
接頭辞 # と5桁以上の整数
000;▲000
3桁以上の整数。負の時、接頭辞▲つき。
000;▲0
000;▲000 と同義。負部分パターンは接頭辞・接尾辞だけが有効: ###,000,000 : 6桁以上の整数, 3桁ごとに区切り。
##,#000,000
###,000,000 と同義。桁区切子の幅は小数点に近いものが採用される。 #,##000,000 や ###0,00,000 も同義。
000%
元の数を100倍して、3桁以上の整数に接尾辞%。2→200%, 3.14→314%, 0.001→000%
‰ = 0
接頭辞‰ = と、元の数を千倍して、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)