powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ????
4 сообщений из 4, страница 1 из 1
????
    #32193815
Oilman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это глюк или я чего-то не понимаю?
На форме имеется edit1, edit2, button1, button2;
procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtofloat(edit1.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
if a>=393.7 then
edit2.Text:='>=393.7';
end;
заранее объявляем a:real
запускаем прогу, вводим в edit1 393,7 нажимаем по очереди Button1 и Button2 в edit2 ничего не появляется

немного изменим код:
procedure TForm1.Button1Click(Sender: TObject);
begin
a:=strtofloat(edit1.Text);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if a>=393.8 then
edit2.Text:='>=393.8';
end;

запускаем прогу, вводим в edit1 393,8 нажимаем по очереди Button1 и Button2 в edit2 появляется '393,8'

почему???
P.S.
замена на a:single с 393,7 работает а с 250,7 нет;
замена на a:extended проблему решает
...
Рейтинг: 0 / 0
????
    #32193832
m_kus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это недостаток... хелпа.... Они должны были там явно написать, что сравнивать два числа с плавающей точкой не рекомендуется... А лучше ещё предупреждения на этапе компиляции выдавать... Хотя это лишнее, наверное...
Это всё потому, что плавающие числа хранятся в памяти приближённо.
Для сравнения можно использовать конструкцию типа:
Код: plaintext
1.
  if (a> 393 . 7 ) or (abs(a- 393 . 7 )<1E- 6 ) then ...

Это не глюк - это суровая реальность...
...
Рейтинг: 0 / 0
????
    #32193911
Oilman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, теперь работает. А в чём причина такого смещения значения числа в памяти? Почему для одних чисел (393,7) смешение происходит, а для других (393,8) нет?
...
Рейтинг: 0 / 0
????
    #32193921
Oilman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И ещё, почему если переменной a:real присвоить значение 393.7 , а затем проверить разницу (393.7-a) то получится 5,...E-18?
Ведь real должен округляться до E-324.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ????
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]