1

なぜこれが起こるのか、誰かが私に説明できますか?

var float:Number = 1.40;
var bytes:ByteArray = new ByteArray();

trace('float: ' + float);
bytes.writeFloat( float );
bytes.position = 0;
trace('bytes.readFloat: ' + bytes.readFloat() );

トレースからの出力:

>> float: 1.4
>> bytes.readFloat: 1.399999976158142

これは、過去数時間で私を夢中にさせました。ありがとう

4

2 に答える 2

2

ByteArray.writeFloat()は 4 バイトのみを書き込みます。つまり、単精度浮動小数点値が格納されます。float を書き込むために呼び出すwriteDouble()必要があり、それでも精度が失われる可能性がありますが、その損失はそれほど劇的ではありません。これは、浮動小数点型の主な制限です。

于 2012-11-05T12:46:04.307 に答える
2

ここで double を使用してもよろしいですか?

これはうまくいくはずです:

var double:Number = 1.40;
var bytes:ByteArray = new ByteArray();

trace('double: ' + double);
bytes.writeDouble( double );
bytes.position = 0;
trace('bytes.readDouble: ' + bytes.readDouble() );
于 2012-11-05T12:49:16.940 に答える