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

Вниз

Как сравнить два числа, с дробными частями !!!   Найти похожие ветки 

 
kyn66 ©   (2006-02-10 15:15) [0]

Уважаемые мастера,на форме есть компоненты 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
Спасибо.


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

см. SameValue


 
StriderMan ©   (2006-02-10 16:19) [2]

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

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

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


 
Vlad ©   (2006-02-10 16:19) [3]


> kyn66 ©   (10.02.06 15:15)  

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


 
McSimm ©   (2006-02-10 16:34) [4]

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


 
kyn66 ©   (2006-02-10 16:44) [5]

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


 
Desdechado ©   (2006-02-10 18:03) [6]

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



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

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

Наверх




Память: 0.48 MB
Время: 0.044 c
1-1138032968
DelphiLexx
2006-01-23 19:16
2006.02.26
TChart и Series в стили Point


4-1133908355
Volf_555
2005-12-07 01:32
2006.02.26
Как получить строковое значение функции CreateGUID()?


15-1139147108
Вячеслав Бессонов
2006-02-05 16:45
2006.02.26
Begin end.


9-1123916645
boalse
2005-08-13 11:04
2006.02.26
Воспроизведение музыки


4-1133942809
sax_ol
2005-12-07 11:06
2006.02.26
Сообщение о только что вставленном диске в CD-ROM