переменные типов extended и double не равны друг другу

Beaver_lg
Дата: 27.11.2007 19:54:52
Хоть у extended точность больше, но ведь число одно и тоже. Почему они не равны или я чего то не учел?

procedure TForm1.Button1Click(Sender: TObject);
var x:double;
    y:Extended;
begin

y:=2.51;
x:=y;
if x=y then
  Label1.Caption:='Переменные равны'
else
  Label1.Caption:='Переменные не равны'; //выдается это значение

end;
А столкнулся с этим когда не стала работать строка
x:=DataSource1.DataSet.FieldByName('Field1').AsFloat-StrToFloat(StringGrid1.Cells[1,1])
if x=0 then...
...AsFloat возвращает тип Double, а strtofloat возвращает Extended
Пришлось StrToFloat(StringGrid1.Cells[1,1]) присваивать переменной типа Double, а потом обрабатывать с полем [Field1]. Может есть решение лучше? Пример с X и Y привел, чтоб показать, что сравниваются одинкавые числа.
Мимопроходящий
Дата: 27.11.2007 19:57:56

Привет, Beaver_lg!
Ты пишешь:

Beaver_lg
Bl> Хоть у extended точность больше, но ведь число одно и тоже.
с чего ты взял?

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4

Beaver_lg
Дата: 27.11.2007 20:05:37
Мимопроходящий

чего ты взял?


y:=2.51;
x:=y;

Разве не равны? Причем если вместо 2.51 взять 2.5, то Delphi выдаст что числа равны.
А в примере с базой и Stringgrid, было одно значение(в базе) и одно в гриде, котороые обрабатывались. По одному использовалось при отладке, в реальности их естественно больше.
Anatoly Podgoretsky
Дата: 27.11.2007 20:58:15
Не равны они, поскольку данное число бесконечная дробь, а длина мантиссы разная.
И в присвоение длинное присваивается короткому, наоборот возможно и прошло бы.
StarWind
Дата: 28.11.2007 03:10:05
Уж сколько раз твердили миру... нельзя сравнивать на равенство числа с плавающей запятой
Beaver_lg
Дата: 28.11.2007 20:26:13
StarWind
Уж сколько раз твердили миру... нельзя сравнивать на равенство числа с плавающей запятой

а что ж делать?
S.G.
Дата: 28.11.2007 23:09:05
Beaver_lg
а что ж делать?
начать с прочтения статьи к которой я дал линк.