Measurement.jsに取り組んでいるときに、TDD の楽しさのおかげで、(少なくとも私が思いついたように) JavaScript エンジンで公開されている非常に奇妙な動作に出くわしました。
コンソールに入力した場合でも、スクリプト内で実行した場合でも、次のようになります。
-1 + 0.85 --> -0.85 ✓
-1 + 1 --> 0 ✓
-1 + 1 + -.15 --> 0.15 ✓
-1 + 1.15 --> 0.1499999999999999 ?!?
これは、次のブラウザ/OS で正確にテストおよび再現されています。
- FF 24.0 (デビアン 3.10)
- クローム 30.0.1599.114 (デビアン 3.10)
- クロム 30.0.1599.101m (Win7SP1)
- Internet Explorer 10.0.9200.16721 (Win7SP1)
これはさまざまなベンダーで一貫しているため、これには特定の理由があるはずだと思います。
- これの理由は何ですか?
- JSでの正確な計算に問題を引き起こすため、この動作を回避するためのベストプラクティスは何ですか?
更新:
最もわかりやすい説明を含む。
これまでのところ、 http ://floating-point-gui.de/にある複数のプログラミング言語の回答と回避策 (thanx @RocketHazmat)