我的电脑变得愚蠢。 0 + 20 = 19.921875 !!!帮我!

时间:2010-07-30 16:35:52

标签: flash actionscript actionscript-2

当你的计算机无法获得正确的金额时,你知道这是一个错误!

我一点都不知道为什么会发生这种情况:

_root.attachMovie("clippy","aClip",_root.getNextHighestDepth());

trace("alpha 1 = "+aClip._alpha);
aClip._alpha = 0;
trace("alpha 2 = "+aClip._alpha);
aClip._alpha += 20;
trace("alpha 3 = "+aClip._alpha);
aClip._alpha = 20;
trace("alpha 4 = "+aClip._alpha);

输出是:

alpha 1 = 100
alpha 2 = 0
alpha 3 = 19.921875
alpha 4 = 19.921875

19.921875应该是20! :(

我要哭了。我的处理器有癌症吗?老年痴呆症? 谁说电脑不犯错误?

P.S。我也使用了aClip._alpha = Math.round(aClip._alpha)但是跟踪是一样的!

5 个答案:

答案 0 :(得分:23)

_alpha值存储为一个字节(我应该说是8位 - 从0255的整数值)

设置_alpha值时,使用百分比。 当您检索它时,它会生成百分比的精确十进制表示。

aClip._alpha = 20;
20%的{​​p} 25651.2,因为它存储为整数,所以它会被51覆盖。

然后,

51 / 256 * 100是Flash向您回复的方式,即19.921875

答案 1 :(得分:1)

看起来似乎是

答案 2 :(得分:0)

如果我没记错的话,flash会在内部存储一些奇怪的疯狂值,比如0..240(我不认为它是255)。难道它是20%是20%,并且在四舍五入后,19.92是一旦它转换回百分比时最接近的值?

答案 3 :(得分:0)

Flash CS5中的组件属性框中也出现“浮动问题”。在全新安装之后,CS5看起来很疯狂,有组件属性,输入20后会给出20.00001。

借助Adobe Application Manager更新软件可以解决此问题。

答案 4 :(得分:-1)

无论其他答案的有效性如何,有一些已知且记录良好的浮点实现的人工制品,其中包括Adobe Flash Player使用的。例如,下面的代码会产生1.0010000000000001的输出稍微不正确(如果在数学中有这样的东西):

trace(0.1009 + 0.9001);

所有这些,就像我说的,是使用IEEE浮点规范实现的一部分。