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 SP2 1 0 0.6 Firefox 2.0.0.11 on WindowsXP SP2 1 1 0.6 Safari 3.0.4 on Mac OS X 10.5.1 1 1 0.6
- n=0.85
Math.round(n) n.toFixed(0) n.toFixed(1) IE7 on WindowsXP SP2 1 0 0.9 Firefox 2.0.0.11 on WindowsXP SP2 1 1 0.8 Safari 3.0.4 on Mac OS X 10.5.1 1 1 0.8
- n=1.55
Math.round(n) n.toFixed(0) n.toFixed(1) IE7 on WindowsXP SP2 2 2 1.6 Firefox 2.0.0.11 on WindowsXP SP2 2 2 1.6 Safari 3.0.4 on Mac OS X 10.5.1 2 2 1.6
しかしざっと見たところ、toFixed()のバグ報告は2007年から2008年に集中している。どうもIE7のころに問題になったようだ。
ではIE8、IE9ではどうなっているのか? ということで調べてみた。
とりあえず引用した表で問題となっている、0.55を0ケタで丸めたときと0.85を0ケタで丸めたときの結果が以下。
- n=0.55
-
n.toFixed(0) IE8 on Windows7 1 IE9 on Windows7 1 - n=0.85
-
n.toFixed(0) IE8 on Windows7 1 IE9 on Windows7 1
IE8以降は修正されているようですね。とはいえ、IE7以前を使っている人は少なくなったとはいえ一定数居るわけで、toFixed()を使うのはまだちょっと早いか。
スポンサーリンク
JavaScriptカテゴリーの投稿
- [Gmaps.js] 地図をドラッグした後の中心座標を取得する
- [jQuery] 文字列が含まれているかどうかの判定
- 圧縮後のJavaScriptやHtmlを元に戻すWebサービス
- Google Code Prettify導入が超絶簡単になっていた
- [JavaScript] 全角を2、半角を1と数えるコード
- [JavaScript] 指定範囲内の整数からランダムな値を得る
- [JavaScript] sort()メソッドによる配列の並び替え
- シンタックスハイライター「Google Code Prettify」のカスタマイズ
- [JavaScript] オブジェクトにプロパティを追加
- [JS] 正規表現の特殊文字を置換するJavaScript版preg_quote()