Number.toFixed()の不具合はIE8以降では修正されているみたい

公開
更新日

スポンサーリンク

自分が以前書いたコードを修正していたら、toFixed()というのが出てきて、これって何だっけと思った。toFixed()は四捨五入ですね。

こういう風に使う。

var num = 56.64523;
alert( num.toFixed(2) );// => 56.65

しかしtoFixed()を検索してみると、あまりよろしくない報告が。

IEのNumber.toFixed()の挙動が四捨五入としては微妙な件 – oldriverの日記

Internet Explorerで0.5<=n<1の時に桁数0を指定するとおかしな数値を示すことが多いとのこと。以下が引用させていただいた表ですが、0.55と0.85を0ケタで四捨五入したとき、IE7の場合だけ1にならず0となっている。

  • n=0.55
Math.round(n)n.toFixed(0)n.toFixed(1)
IE7 on WindowsXP SP2100.6
Firefox 2.0.0.11 on WindowsXP SP2110.6
Safari 3.0.4 on Mac OS X 10.5.1110.6
  • n=0.85
Math.round(n)n.toFixed(0)n.toFixed(1)
IE7 on WindowsXP SP2100.9
Firefox 2.0.0.11 on WindowsXP SP2110.8
Safari 3.0.4 on Mac OS X 10.5.1110.8
  • n=1.55
Math.round(n)n.toFixed(0)n.toFixed(1)
IE7 on WindowsXP SP2221.6
Firefox 2.0.0.11 on WindowsXP SP2221.6
Safari 3.0.4 on Mac OS X 10.5.1221.6

しかしざっと見たところ、toFixed()のバグ報告は2007年から2008年に集中している。どうもIE7のころに問題になったようだ。

ではIE8、IE9ではどうなっているのか? ということで調べてみた。

とりあえず引用した表で問題となっている、0.55を0ケタで丸めたときと0.85を0ケタで丸めたときの結果が以下。

n=0.55
n.toFixed(0)
IE8 on Windows71
IE9 on Windows71
n=0.85
n.toFixed(0)
IE8 on Windows71
IE9 on Windows71

IE8以降は修正されているようですね。とはいえ、IE7以前を使っている人は少なくなったとはいえ一定数居るわけで、toFixed()を使うのはまだちょっと早いか。

スポンサーリンク


Comment