IE8での数値処理について
IEの数値処理を調べてみました
Specの修正をしていると、IE8 (Win XP SP3)で不思議な挙動をしているのを発見しました。
たとえば、JavaScriptで以下のような処理をします。
var a = 0.1 - 0.102; a; /* aは0.002ではない */
そうすると、上の変数aは0.002になりそうなのですが、実際には、「-1.99999999999999E-03」という値がIE8では入っています。
他のブラウザでも試そうと、Opera12.14で試してみると、「-0.001999999999999988」という数値が出ました。
IEの不具合なのかJavaScriptの仕様なのか
今回、いろいろと数値を変えて調べてみましたが、1以上の数値では (整数であろうとなかろうと)問題は起きませんでした。
両方が1以下の数値で、かつ、片方の数値リテラルが小数点第3位の位を使ったときだけ起きるようです。
これがEcmaScriptの仕様なのかどうかはわかりませんが、少なくとも、IEの計算処理をそのまま信用するわけにはいかなくなりました。さらに他のブラウザでも調査を続けるつもりです。