Форум: "Начинающим";
Текущий архив: 2006.02.26;
Скачать: [xml.tar.bz2];
ВнизКак сравнить два числа, с дробными частями !!! Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.043 c