Главная страница
    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.007 c
6-34137
Mufta
2002-08-31 14:44
2002.11.11
Как работать через прокси с компонентом TWebBrowser


6-34143
XED
2002-09-12 14:12
2002.11.11
Вопрос по чату!


14-34248
Карлсон
2002-10-23 23:18
2002.11.11
ну ваще!


14-34182
pomka
2002-10-21 17:43
2002.11.11
помогите!!!!!!HELP ME, PLIS!!!


1-34040
asdfghqwert
2002-10-30 16:09
2002.11.11
CheckListBox - есть вопросы





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский