ByteArray readFloat问题 - ActionScript 3

时间:2012-11-05 12:30:48

标签: actionscript-3 flash actionscript bytearray

有人可以向我解释,为什么会这样?

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
这让我在最后几个小时疯狂。 感谢

2 个答案:

答案 0 :(得分:2)

ByteArray.writeFloat()仅写入4个字节,这意味着存储了单个精度flosting-point值。你必须打电话给writeDouble()来写你的浮点数,即使这样你也可能失去精确度,尽管这种损失不会那么大。这是浮点类型的核心限制。

答案 1 :(得分:2)

这适合你在这里使用双倍吗?

这应该可以正常工作:

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

trace('double: ' + double);
bytes.writeDouble( double );
bytes.position = 0;
trace('bytes.readDouble: ' + bytes.readDouble() );