当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《我的电脑变得愚蠢.0+20=19.921875!!!帮我!》经验,为你挑选了1个好方法。

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

我没有丝毫想到为什么会这样:

_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!:(

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

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



1> Bertrand Mar..:

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

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

aClip._alpha = 20;

20%256就是51.2,因为它存储为一个整数,它会被难倒来51.

然后,

51 / 256 * 100是Flash如何将它回馈给你,这是19.921875.


很好解释.我没有动作脚本的经验,甚至我去"aaahh是的,这是有道理的!我明白了!"
很好的解释.但是,IMO对Macromedias/Adob​​es部分的设计有些不好,因为1)它忽略了getter/setter原则的重要部分 - 我的意思是你将变量设置为20,但是之后得到19.!@%$^ 2)将打破简单,逻辑和可读的代码,例如`if(_alpha == 20)`,因为即使完全控制它,你也永远无法确定`_alpha`将等于什么.当然`int(_alpha)`会有所帮助,但是再一次只是在这个小混乱的顶部修补漏洞.我理解不进一步抽象的原因 - 速度.
他们使用ActionScript 3做了正确的事情 - "alpha"现在很难约束到从"0"到"1"的范围,并且无论如何都会让你准确地把它放进去.当然不包括IEEE浮点怪癖,这是交易的一部分.
推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有