автоматически мигать как 3 числа - PullRequest
0 голосов
/ 26 сентября 2011

Я написал длинный пост, пытаясь объяснить точные детали проблемы, с которой я сталкиваюсь, но вместо этого я думаю, что постараюсь не усложнять ее и задать пример вопроса здесь:

var n1:Number = 9.99999999999999;
n1 += 0.000000000000009;
var n2:Number = n1 + 10;
var n3:Number = n1 - 10;

Короче говоря,n1 = 9.99 .... 7, n2 = 20, n3 = 10.

Если я попытаюсь провести сравнение между n1 и n3, они должны быть одинаковыми, но это не так.Меня не волнует, округляет ли это вспышка или нет, мне просто нужно, чтобы они были одинаковыми (а они нет, вызывают вспышки в одном случае, а не в другом).

Есть ли какое-то стандартное решение длятакая проблема?

PS Мне не нужна эта точность для моих чисел, но я также не хотел бы микроуправлять округлением чисел КАЖДЫЙ раз, когда я выполняю манипуляции (кажется, что это может добавить МНОГОкод для смешивания).Однако, если это единственное решение, я думаю, мне просто придется много округлять код, ха.

Ответы [ 2 ]

1 голос
/ 26 сентября 2011

Number во флэш-памяти - это число с плавающей запятой двойной точности. Подробнее здесь о них. Эти «проблемы» не являются уникальными для флэш-памяти, а связаны только с тем, как эти цифры хранятся.

Есть несколько вариантов. Вот небольшая быстрая библиотека для нечеткого сравнения чисел с определенной погрешностью. Другой вариант - реализовать математическую библиотеку с фиксированной точкой .

.
0 голосов
/ 26 сентября 2011

Является ли проблемой просто заключить в int (), если вы пытаетесь сравнить?

trace(int(n1) == int(n3));
...