概要

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進小数の基数変換で説明した無限小数が原因です。


なので書き方を変えてみましょう。

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);
			}
		}
	}
}
 

|新しいページ|検索|ページ一覧|RSS|@ウィキご利用ガイド | 管理者にお問合せ
|ログイン|