offsetメソッドの戻り値が整数とは限らないのは、以前からの仕様ですか？


jQueryのoffsetメソッドで位置情報を取得したら小数点で返ってきました。  
これまでは整数が返ってきていた(と思っていた)ので驚きました。

**jQuery バージョン**  
・1系

**質問1**  
・何か仕様上の変更があったのでしょうか？  
・それとも以前から、位置情報は小数点で返ってくるものなのでしょうか？  
・遭遇したケースが、たまたま整数戻り値だっただけ？  
・ブラウザ位置情報が小数点で返ってくるのは以前からそういう仕様だったのか、知りたいです

**質問2**  
・ここら辺りの挙動は、何をどうやって確認すれば良いでしょうか？(何に依存している？)  
・jQueryバージョン？  
・ブラウザバージョン？  
・両方？




jQueryの公式ドキュメント <https://api.jquery.com/offset/>
には、「戻り値は実数になる場合があるため、整数であると仮定してはいけません。」と書かれています。

* * *

ちょっとコードと標準仕様を見てみましょう。

  1. <https://github.com/jquery/jquery/blob/93bee4701d14202045a88aab156da0daf9418430/src/offset.js#L76-L116>  
jQueryの`offset()`は DOM API の`getBoundingClientRect()`メソッドを利用して座標を計算しています。

  2. <http://www.w3.org/TR/cssom-view/#extensions-to-the-element-interface>  
`getBoundingClientRect()`は、`DOMRect`を返します。

  3. <http://www.w3.org/TR/geometry-1/#DOMRect>  
`DOMRect`は座標を浮動小数点数で保持しています。

というわけで、小数になりますね。

[jQuery
コードの履歴を辿ってみる](https://github.com/jquery/jquery/commits/master/src/offset.js)と、2007年
(v1.2) には既に`getBoundingClientRect()`が使われています。これ以前はファイルが変わってしまうので、辿るのが面倒ですね...




  1. 古い仕様までは知らないので質問1は答えにくいのですが、  
座標の性質を考えれば`offset`が浮動小数点数で値を返すのは当然の仕様だと思います。  
わざわざ整数に切り捨てて精度を落とす理由があるとも考えにくいので、  
おそらくですが元から整数を返すというような仕様ではなかったはずです。

  2. 単純に公式のAPIドキュメントを参照してください。jQueryを使う前にドキュメントすべてに目を通すべきなどとは思いませんが、詳細な仕様を確認したいという事態になったら、何はともあれまず公式のドキュメントをあたるべきです。実際に、その点についてちゃんと説明されています。

> Additional Notes:
>
> The number returned by dimensions-related APIs, including .offset(),  
>  may be fractional in some cases. Code should not assume it is an  
>  integer. Also, dimensions may be incorrect when the page is zoomed by  
>  the user; browsers do not expose an API to detect this condition.

<http://api.jquery.com/offset/>

つまり、`offset`は浮動小数点数を返すことがある、整数だと仮定してコードを書くべきでない、とドキュメントにしっかり明記されています。

