Форум » Алгоритмы » Вопрос про сравнение двух переменных типа double? » Ответить

Вопрос про сравнение двух переменных типа double?

genbachae: Есть такая строчка кода: [quote]if(zv3 == NormalizeDouble((Low-(down+4)*Point),Digits))[/quote] Причём: [quote]Alert: zv3 = 1.3768 NormalizeDouble((Low-(down+4)*Point),Digits) = 1.3768[/quote] Вопрос: Почему оператор if даёт FALSE?

Ответов - 2

Scriptong: genbachae пишет: Почему оператор if даёт FALSE? Функции Alert и Print производят округление всех значений типа double до 4-х знаков после запятой. Поэтому вы не видите истинное значение zv3. Чтобы увидеть все значащие цифры выводите значение zv3 при помощи такого оператора: Alert("zv3 = ", DoubleToStr(zv3, 16)); Наилучший способ сравнения двух переменных типа double - сравнение их разности с некоторой минимальной величиной. Например, если вы сравниваете две цены, то достаточно сравнить их разницу с величиной Point: double a = ....; double b = ...; if (MathAbs(a - b) >= Point) { // значения не равны } else { // значения равны }

SK: genbachae пишет: Почему оператор if даёт FALSE? Видимо, потому, что значение zv3 не нормализовано. Если нормализовать оба сравниваемые значения, то if() будет возвращать true.



полная версия страницы