number()

XPath 1.0 の数値

[1] XPath の数値は、 IEEE 754 の64ビット倍精度浮動小数点値です。 仕様書には、 <http://java.sun.com/docs/books/jls/html/4.doc.html#9208> に概要があるからそれを参照せよと言っています。 (IEEE の仕様書は自由に無料で手に入るものじゃないからかな。)

[2] 次の特殊な値を持ちます:

[3] 数値に対して、加減乗除が定義されています。

+
加算
-
減算
*
乗算
div
浮動小数点除算 (IEEE 754)
mod
切捨て除算剰余 (ECMAScriptJava% と同じ; IEEE 754 は丸め除算剰余なので注意)

[4] number() による文字列から数値への変換で空白 (whitespace) が定義に使われていますがその意味は規定されていません。 XPath の他の部分と同じく XMLS なのでしょうか。

[5] string() による文字列キャストについて、 XPath 1.0 では IEEE 754 の精度通りの値を整数または小数表現することを求めています。 Firefox は10進数で17桁くらい、 Chrome は4桁くらいの表現になります。 (JavaScriptToString と同じみたいです。)

17桁くらい = 倍精度浮動小数点数の表現能力くらい

[6] Chrome は小さな数だと指数表記になります (XPath 1.0 違反)。 一方 Firefox は小さくても小数のままです。 ToString では指数になるので、 違う文字列化コードを通っているようです。