単体テストの 1 つで、JavaScript で予期しない丸め結果が得られるという奇妙な問題に遭遇しました。
(2.005).toFixed(2)
// produces "2.00"
(2.00501).toFixed(2)
// produces "2.01"
最初は、これは Webkit のみの問題ではないかと疑っていましたが、Gecko で再発することから、ECMA-262 または IEEE-754 の予想される副作用であることがわかります。2.005 のバイナリ表現はこれまでになくわずかに少ないと思いますか? それとも、ECMA-262 は の偶数への丸め方法を指定していtoFixed
ますか?
私を安心させるためだけに、フードの下で何が起こっているのかについて洞察を提供してくれる人はいますか?
更新:コメントありがとうございます。
加えて、私が少し神経質になったことの 1 つは、Webkit のクイック検索で見つかったコメントでした。dtoa.cpp
これは、丸めには複数のパスがあり、関連するFIXME
:
https://trac.webkit.org/browser/trunk/Source/WTF/wtf/dtoa.cpp#L1110
また、それはあまり意味がありませんが、IE9 は期待どおりに丸めます。これは、ECMA-262 の一部ではないか、バグがあることを意味します。