Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.11.11;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.008 c
1-33990
Алексей-Сам
2002-11-01 12:35
2002.11.11
Проблемы при создании Help-системы


14-34241
Beginner-Designer
2002-10-22 20:01
2002.11.11
Нужна компанента для C++ Builder по горячим клавишам


3-33860
Sirus
2002-10-21 07:36
2002.11.11
Типы полей Interbase... КТо знает какие они???


3-33912
prOff
2002-10-22 20:02
2002.11.11
Где взять Oracle или что потроще?


14-34259
robot 415
2002-10-23 19:11
2002.11.11
тип string, освобождение памяти





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский