Вопрос: Почему выражение вычисляется неправильно?
double price=1.0;
double point=0.0001;
double level=272.0;
double levelprice;
levelprice=price+point*level;
if(levelprice==1.0272){
Alert("Правильно");
}
else{
Alert("Неправильно");
}
Ответ(integer): У переменных с плавающей точкой ограниченное количество знаков после запятой. Из-за этого, в процессе вычисления, значения могут незначительно искажаться. После вычисления выражения, перед сравнением чисел с плавающей точкой, их необходимо нормализовать до уровня требуемой точности:
levelprice=NormalizeDouble(levelprice,4);
if(levelprice==1.0272){
Alert("Правильно");
}
else{
Alert("Неправильно");
}