LoginSignup
2
0

More than 5 years have passed since last update.

当たり前だけどハマった-2進数の世界で小数計算

Posted at

何が起きたか

var d = 1;
obj.setPoint(1717 * Math.pow(0.1, d));

なんてコードを書いたら「171.7」ってセットされる。
と思ってしまった。
でも、実際には「171.70000000000002」がセットされた。

どうして?

理由は簡単、コンピュータは2進数の世界で動いてます。
なので2進数で表現しきれないものは誤差が出る。
当たり前。。。
小数なんか使うから(。´・ω・)

どうする?

小数を使わずに整数にしてから桁移動させればいいんじゃない?
っていうのが一般論なんだろうくらいによく言われてる。
でも、今ははなから桁移動させたいだけ。
整数にするなんてあまりにイケてない。

どうしたか

小数の掛け算するからおかしくなるんで、整数で割ることにした。

var d = 1;
obj.setPoint(1717 / Math.pow(10, d));

これできれい。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0