当你的计算机无法获得正确的金额时,你知道这是一个错误!
我一点都不知道为什么会发生这种情况:
_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)但是跟踪是一样的!
答案 0 :(得分:23)
_alpha
值存储为一个字节(我应该说是8位 - 从0
到255
的整数值)
设置_alpha
值时,使用百分比。
当您检索它时,它会生成百分比的精确十进制表示。
aClip._alpha = 20;
20%
的{p} 256
为51.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浮点规范实现的一部分。