![]() |
Почему выражение "n/2 == Math.round(n/2)" принимает значение "false"?
Почему выражение
Код:
n/2 == Math.round(n/2)Пример кода наглядно это демонстрирующего: Код:
var n:Number=0; |
У флеша есть погрешность при сложении дробных чисел не кратных (0.5, 0.25, 0.125, 0.0625 и тд).
Поэтому со временем накапливается ошибка при сложении. И реально, при многократном вызове n+=0.2, вместо 4 оказывается число 4.000000000000000888178419700125 Вторая проблема заключается в том, что при таком малом значении дробной части, в трейс выводится только целая часть, что может вызывать кучу проблем и вопросов, вроде сраниваем Код:
trace (n +" == 4 -->" + (n== 4))Увидеть данную проблему можно так: Код:
trace (n - 4) |
Спасибо огромное за адекватный и развёрнутый ответ!
В принципе я что то подобное подозревал, а есть ли тогда еще какой способ проверки числа на кратность другому, любому числу. Допустим у меня есть переменная-счетчик "x += n" (где n - любое число), и мне нужно отслеживать кратность "x" чилсу "y". Пример: Код:
var x:Number = 0; |
Код:
if(Math.abs(a-b)< 0,0000001) trace('равно') |
Если числа целые, то
Код:
n = 4; |
Точно, смотреть по остатку. Спасибо еще раз, я думаю это пригодиться не только мне.
|
| Часовой пояс GMT +4, время: 11:19. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.