AS3で小数点を扱うとAS2と挙動が違う
trace(1.90-1.0)
trace(1.9-0.9)
上記コードを実行して期待される値はもちろん、「0.9」「1」なんだけど、残念ながら事実は違うようだ。実際の数値は以下の様になる。
0.8999999999999999
0.9999999999999999
なんだよこれ!
AS3でNumber、int、uintが導入されて数の扱いは改善されたはずじゃなかったのか!?
更に腹立たしいことにこれをAS2で実行すると、
0.9
1
と期待通りの値が帰ってくれる。もちろんAS1でもAS2と同様なのだ。どうすりゃいいんだ!?既出の問題の可能性が高いし、仕様としてそうなってるのかもしれないけど困った。
追記:
toFixed ()
とか
toPrecision ()
で処理すればいいんかな?
美しくないなぁ。
丸め誤差?
ここら辺って超基礎的なところなんだろうけど悲しいかな分からない
追記の追記
なんか浮動小数点について調べていたらこの仕様の方がいいのかな~と思えてきた。まあいいやtoFixed()してNumber()でキャストします。
この件について詳しい解説が欲しいなあ。
今まで自分のことを文系プログラマとは死んでも呼ばないでおこうと思っていたがちょっと言ってしまいそうだ。