Вы знаете, что это - педераст - все, когда Ваш компьютер не может разобраться в сумме!
У меня нет малейшей идеи, почему это происходит:
_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!:(
Я собираюсь кричать. Мой процессор имеет рак? Alzheimer? Кто сказал, что компьютеры не делают ошибки?
P.S. Я также использовал aClip. _ alpha=Math.round (aClip. _ альфа), но трассировка была тем же!
_alpha
значения хранятся в виде байтов (я бы сказал, 8 бит - целое число от 0
до 255
)
Когда вы устанавливаете значение _alpha
, вы используете процент.
Когда вы его извлекаете, он дает точное десятичное представление процента.
aClip._alpha = 20;
20%
из 256
составляет 51,2
, поскольку оно хранится как целое число, оно будет сброшено на 51
.
Тогда
51/256 * 100
- это то, как Flash возвращает его вам, что составляет 19.921875
.
Если я правильно помню, flash хранит альфу внутри с каким-то странным безумным значением, что-то вроде 0...240 (я не думаю, что это 255). Может ли быть так, что он принимает 20 за 20%, и после округления 19.92 является ближайшим значением, когда оно преобразуется обратно в проценты?
Независимо от обоснованности других ответов, существуют известные и хорошо документированные артефакты реализации плавающей точки, которую, среди прочих, использует Adobe Flash Player. Следующий код, например, выдаст слегка некорректное (если такое вообще возможно в математике) значение 1.0010000000000001
:
trace(0.1009 + 0.9001);
Все это, как я уже сказал, является частью использования реализации спецификации IEEE с плавающей точкой.