有人可以向我解释,为什么会这样?
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
这让我在最后几个小时疯狂。
感谢
答案 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() );