浮動小数点の誤差

研修でうまくいかなかったのはこれが原因だったのかー。



研修で困ったやーつ。

たしかMath.random()でランダムな値を作って、
それを使ってif文の分岐を作ったんですが、なにやらちゃんと分岐してくれない・・・


ディベロッパーツールで値を見てみると、
0.1が、0.1000000000028とかになってる。
0.1よりちょっと大きいから条件式でうまくいかない。

ふむむむ。


コンソールってみる。
> 0.1 + 0.2 == 0.3

これはfalseになります。

> 0.1 + 0.2 == 0.3
false



> 0.1 + 0.2


ターン(enter)
すると

> 0.1 + 0.2
0.30000000000000004


ふむむむ。(なんだあの4・・・)


パーフェクトJS(p51-p52)

"浮動小数点数は、ほとんどの場合小数点以下を正確に表現できない。"

近似値を出していて正確な値は出せない、らしい。

他の言語でも同様らしいので、もしかして常識?