Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Равенство значений переменных в периодической функции (http://www.flasher.ru/forum/showthread.php?t=143318)

Evgan 13.08.2010 11:51

Равенство значений переменных в периодической функции
 
Доброго времени суток.
Столкнулся с такой проблемой: в периодически вызываемой функции (setInterval) происходит изменение значения некого число (увеличение/уменьшение) до определенного значения, однако когда значение изменяемой переменной становится равным определённому, система этого не "отлавливает" +(

Может кто подсказать почему так происходит и как с этим бороть?
Вот этот незамысловатый код:
Код AS1/AS2:

var A:Number = 0;
var B:Number = 5;
var d:Number = 0.1;
function Periodic():Void {
        if (A != B) {
                A += d;
        } else {
                trace('НЕ ПРОИСХОДИТ');
                clearInterval(nomInt_Periodic);
        }
        trace(B+' <> '+A+' <> '+(A == B));
}
var nomInt_Periodic:Number = null;
nomInt_Periodic = setInterval(Periodic, 100);

Благодарю

amesqit 13.08.2010 12:39

дело в типах данных as, он не предназначен для точных вычислений, подробнее можете почитать например тут

rainbowrussia 13.08.2010 12:50

Замените "A != B" на "Math.abs(A-B) > 0.0000001".
Либо, если задача позволяет, перейдите на целые числа - B=50, d=1.

Ну или как вариант - эмуляция относительно точных вычислений с плавающей точкой:

Код AS1/AS2:

var A:String = "0";
var B:String = "5";
var d:Number = 0.1;
function Periodic():Void {
        if (A != B) {
                A = parseFloat(A) + d;
        } else {
                trace('НЕ ПРОИСХОДИТ');
                clearInterval(nomInt_Periodic);
        }
        trace(B+' <> '+A+' <> '+(A == B));
}
var nomInt_Periodic:Number = null;
nomInt_Periodic = setInterval(Periodic, 10);


Evgan 13.08.2010 13:02

Благодарю, попробую применить ваши варианты


Часовой пояс GMT +4, время: 15:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.