![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2008
Сообщений: 283
|
Доброго времени суток.
Столкнулся с такой проблемой: в периодически вызываемой функции (setInterval) происходит изменение значения некого число (увеличение/уменьшение) до определенного значения, однако когда значение изменяемой переменной становится равным определённому, система этого не "отлавливает" +( Может кто подсказать почему так происходит и как с этим бороть? Вот этот незамысловатый код: 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); |
|
|||||
|
Регистрация: Feb 2008
Сообщений: 560
|
Замените "A != B" на "Math.abs(A-B) > 0.0000001".
Либо, если задача позволяет, перейдите на целые числа - B=50, d=1. Ну или как вариант - эмуляция относительно точных вычислений с плавающей точкой: 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); Последний раз редактировалось rainbowrussia; 13.08.2010 в 13:00. |
|
|||||
|
Регистрация: Jun 2008
Сообщений: 283
|
Благодарю, попробую применить ваши варианты
|
![]() |
![]() |
Часовой пояс GMT +4, время: 15:40. |
|
|
« Предыдущая тема | Следующая тема » |
|
|