概要
0.1, 0.2...0.9, 1.0と0.1ずつ増やして表示するプログラムを書いてみましょう。
プログラム
for (var i:Number = 0.1; i <= 1; i += 0.1)
{
trace(i);
}
普通に書くとこのようになりますが、これだと出力結果は期待通りにはなりません。
0.1
0.2
0.30000000000000004
0.4
0.5
0.6
0.7
0.7999999999999999
0.8999999999999999
0.9999999999999999
このように表示されてしまいますね。
これは、10進小数の基数変換で説明した無限小数が原因です。
これは、10進小数の基数変換で説明した無限小数が原因です。
なので書き方を変えてみましょう。
for (var i:Number = 1; i <= 10; i++)
{
trace(i / 10);
}
値自体は整数で持っておいて、計算する際に10で割って小数にするというやり方です。
これなら誤差は出ないので期待した結果が出力されます。
これなら誤差は出ないので期待した結果が出力されます。
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
出力結果です。
検証用コード
package
{
import flash.display.Sprite;
public class Main extends Sprite
{
public function Main()
{
for (var i:Number = 1; i <= 10; i++)
{
trace(i / 10);
}
}
}
}
このwikiの更新情報RSS