4

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)

4

2 に答える 2