Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.11.11;
Скачать: CL | DM;

Вниз

Может я сошел с ума, а ну глянте???   Найти похожие ветки 

 
Cossys ©   (2002-10-30 17:50) [0]

Ситуация, господа такая:
sw_plus:= ... ;
sab_plus:= ... ;

Минуточку! В РЕЖИМЕ ОТЛАДЧИКА ПРОВЕРЯЛ - ОНИ РАВНЫ, РАВНЕЕ НЕ БЫВАЕТ :-( ПОЧЕМУ ЖЕ КОД НИЖЕ ВЫПОЛНЯЕТ КОД ПОСЛЕ else, КОГДА ДОЛЖЕН ВЫДАВАТЬ "ВСЕ ТИП-ТОП!"
if (sw_plus = sab_plus) then
MessageDlg("ВСЕ ТИП-ТОП", mtError, [mbOk], 0)
else
MessageDlg("ФАКИН", mtError, [mbOk], 0);


 
McSimm ©   (2002-10-30 17:57) [1]

В режиме отладчика чему равно выражение sw_plus = sab_plus в тот момент, когда они равнее не бывают.

Код полнее, описание переменных и разберемся. Сходить с ума не стоит :)


 
Юрий Федоров ©   (2002-10-30 18:04) [2]

И еще.
Если D6 то отладчик имеет св-во мягко говоря глючить и показывать неверные значения переменных


 
Cossys ©   (2002-10-30 18:07) [3]


sw_plus = 179579.22

sab_plus = 179579.22

копеечка в копеечку... даже на форму в Лэйбел выводил, думал мож что-то в дебаге не то... а нэт! Не, ну вы такое видали


 
Cossys ©   (2002-10-30 18:08) [4]

Юрий Федоров ©
Дельфа пятая...


 
McSimm ©   (2002-10-30 18:11) [5]

Тип переменных?

Сравнивать данные с плавающей точкой на равенство НЕПРАВИЛЬНО.


 
MBo ©   (2002-10-30 18:12) [6]

Вещественные переменные так сравнивать не стоит. Делай маленький допуск.
См., например, статью А.Григорьева "Неочевидные особенности..."
на delphi.vitpc.com


 
McSimm ©   (2002-10-30 18:14) [7]

Если интерисует сравнение с точностью до 2х знаков можно написать так:
if (Trunc(100*sw_plus) = Trunc(100*sab_plus)) then

В общем случае для значений с плавающей точкой можно говорить только о приблизительном равенстве:
if (abs(sw_plus - sab_plus) < Eps ) then
где Eps - маленькое число


 
kull ©   (2002-10-30 18:15) [8]


> McSimm © (30.10.02 18:11)
> Тип переменных?
>
> Сравнивать данные с плавающей точкой на равенство НЕПРАВИЛЬНО.

А на неравенство правильно? :)


 
kull ©   (2002-10-30 18:18) [9]

Да есть стандартные функции для сравнивания:

Math.CompareValue

в D6 есть - в других не смотрел.


 
Cossys ©   (2002-10-30 18:20) [10]

McSimm
Как это так???

Сделал, но как по мне - это ананизм (хоть и работает)
Label1.Caption:=FloatToStr(sw_plus);
Label4.Caption:=FloatToStr(sab_plus);

if (Label1.Caption = Label4.Caption) then
MessageDlg("ВСЕ ТИП-ТОП", mtError, [mbOk], 0)
else
MessageDlg("ФАКИН", mtError, [mbOk], 0);

to MBo
статью не нашел :-( Если у Вас есть, кинте на мыло, пожалуйста


 
Cossys ©   (2002-10-30 18:23) [11]

McSimm © (30.10.02 18:14)
Если интерисует сравнение с точностью до 2х знаков можно написать так:
if (Trunc(100*sw_plus) = Trunc(100*sab_plus)) then

о, спасибо, на много симпатичнее


 
MBo ©   (2002-10-30 18:27) [12]

http://www.delphikingdom.com/helloworld/reals.htm


 
myor   (2002-10-31 11:27) [13]

if ((sw_plus/sab_plus=1) and (sab_plus<>0))
then



 
kva   (2002-10-31 11:54) [14]

const
Delta=0.00001; //для сранения на равенство действительных чисел
function IsEqual(const R1, R2: Double; const Del: Double=Delta): Boolean;
//проверка на равенство действительных чисел с точностью Del
begin
Result := (Abs(R1-R2) <= Del);
end;

Пример использования:
if IsEqual(sw_plus, sab_plus, 0.01) then... //c точностью 0.01
или
if not IsEqual(sw_plus, sab_plus, 0.01) then... //c точностью 0.01
или
if IsEqual(sw_plus, sab_plus) then... //c точностью 0.00001
или
if not IsEqual(sw_plus, sab_plus) then... //c точностью 0.00001




Страницы: 1 вся ветка

Текущий архив: 2002.11.11;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.025 c
4-34308
sveralex
2002-09-29 19:15
2002.11.11
RAS API


14-34250
Zergling
2002-10-22 13:33
2002.11.11
C#


3-33899
ACR
2002-10-14 18:23
2002.11.11
DBF + SQL без BDE


1-34016
Дмитрий К.К.
2002-11-02 05:34
2002.11.11
Мастерам деревьев, часть 1: GetLastNode


14-34172
AL2002
2002-10-21 13:41
2002.11.11
Задача.