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 个字节,这意味着存储了一个单精度浮点值。你必须打电话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 回答