Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как сравнить два числа, с дробными частями !!! [D7, WinXP]


kyn66 ©   (2006-02-10 15:15:00) 

Уважаемые мастера,на форме есть компоненты TCurrencyEdit и DBText, которые связаны с полями Float таблицы.
Я пытаюсь сравнить числа, но сравнение работает как-то не адекватно. Правильно сравниваются числа,
у которых нет дробной части. А как мне сравнить дробные. В базе данных числа типа Float имеют
параметр DisplayFormat 0.0. Сравнивая числа, я пытаюсь выделить различные красным цветом.
Однако ожидаемого результата нет. Вот проседура сравнения:

procedure TImpDataFrm.Rep11ADOQueryAfterOpen(DataSet: TDataSet);
const
 FontColors: array[Boolean] of TColor = (clBlack, clRed);
begin
 DBText1.Font.Color  := FontColors[Sum11_1Edit.Value <> Rep11ADOQuerySum1.Value];
 DBText2.Font.Color  := FontColors[Sum11_2Edit.Value <> Rep11ADOQuerySum2.Value];
 DBText3.Font.Color  := FontColors[Sum11_3Edit.Value <> Rep11ADOQuerySum3.Value];
 DBText4.Font.Color  := FontColors[Sum11_4Edit.Value <> Rep11ADOQuerySum4.Value];
 DBText5.Font.Color  := FontColors[Sum11_5Edit.Value <> Rep11ADOQuerySum5.Value];
 DBText6.Font.Color  := FontColors[Sum11_6Edit.Value <> Rep11ADOQuerySum6.Value];
 DBText7.Font.Color  := FontColors[Sum11_7Edit.Value <> Rep11ADOQuerySum7.Value];
 DBText8.Font.Color  := FontColors[Sum11_8Edit.Value <> Rep11ADOQuerySum8.Value];
 DBText9.Font.Color  := FontColors[Sum11_9Edit.Value <> Rep11ADOQuerySum9.Value];
 DBText10.Font.Color  := FontColors[Sum11_10Edit.Value <> Rep11ADOQuerySum10.Value];
 DBText11.Font.Color  := FontColors[Sum11_11Edit.Value <> Rep11ADOQuerySum11.Value];
 DBText12.Font.Color  := FontColors[Sum11_12Edit.Value <> Rep11ADOQuerySum12.Value];
 DBText13.Font.Color  := FontColors[Sum11_13Edit.Value <> Rep11ADOQuerySum13.Value];
 DBText14.Font.Color  := FontColors[Sum11_14Edit.Value <> Rep11ADOQuerySum14.Value];
 DBText15.Font.Color  := FontColors[Sum11_15Edit.Value <> Rep11ADOQuerySum15.Value];
 DBText16.Font.Color  := FontColors[Sum11_16Edit.Value <> Rep11ADOQuerySum16.Value];
 DBText17.Font.Color  := FontColors[Sum11_17Edit.Value <> Rep11ADOQuerySum17.Value];
 DBText18.Font.Color  := FontColors[Sum11_18Edit.Value <> Rep11ADOQuerySum18.Value];
 DBText19.Font.Color  := FontColors[Sum11_19Edit.Value <> Rep11ADOQuerySum19.Value];
 DBText20.Font.Color  := FontColors[Sum11_20Edit.Value <> Rep11ADOQuerySum20.Value];
 DBText21.Font.Color  := FontColors[Sum11_21Edit.Value <> Rep11ADOQuerySum21.Value];
 DBText22.Font.Color  := FontColors[Sum11_22Edit.Value <> Rep11ADOQuerySum22.Value];
end;


Вот картинка моей попытки сравнения

http://yurec66.narod.ru/Vopros.jpg

Подскажите, как все-же их сравнить на неравенство?
Rep11ADOQuery - связан с компонентами DBText.
Sum11_1Edit -:- Sum11_22Edit - Компоненты TCurrencyEdit (на картинке с зеленым фоном, формат 0.0)
БД - MSAccess
Спасибо.


Desdechado   (2006-02-10 18:03:00) [1]

числа с плавающей точкой сравнивать бессмысленно, ибо способ их машинного представления подразумевает наличие погрешности
это первая заповедь


kyn66   (2006-02-10 16:44:00) [2]

Помогло [1] ! Спасибозаподсказку !


McSimm   (2006-02-10 16:34:00) [3]

иногда удобно сравнивать строки
.AsString <> .AsString


StriderMan   (2006-02-10 16:19:00) [4]

Сталкивались с такой проблемой.
дело в том что получается
(3 / 7 ) * 7 <> 7 (!!!!!!!)

где-то в младших разрядах далеко позади запятой появляется единичка или еще что-то.

поэтому если надо сранить два Floata на равенство, нужно брать модуль разницы этих чисел и сравнивать с заранее заведенной константой точности. Мы использовали 0.000001


Vlad   (2006-02-10 16:19:00) [5]


> kyn66 ©   (10.02.06 15:15)  

Предварительно округлив, скажем, до двух знаков после запятой


REA   (2006-02-10 15:50:00) [6]

см. SameValue


Наверх

Титульная страница Поиск, карта сайта Написать письмо