Дело в следующем: когда считаются погрешности и переводятся в строку числа странные получаются. Например: 1,99-1,96 получается результат 0,02999999999. Я понимаю, что юзать FloatToStr и StrToFloat в рассчётах - это моветон, но другого выхода не знаю. И проверка погрешностей не осуществляется, вроде смотрел, чему равны переменные, вводил их значение, но все равно говорит, что неправильно.
| Код | procedure TForm6.Button1Click(Sender: TObject); var volt1,volt2,volt3,volt4,volt5 :real; //переменные для StrGrid1 pog1,pog2,pog3,pog4,pog5 :real; //расчет погрешности aa1, aa2, aa3,aa4,aa5 :real; //для расчета Д aSHk2 :real; //эталонные значения aSHk3 :real; //------------------ begin aSHk2 := 1.99; aSHk3 := 2; volt1 := StrToFloat (StringGrid1.Cells [1,1]);// ---------------------------------- volt2 := StrToFloat (StringGrid1.Cells [1,2]);// volt3 := StrToFloat (StringGrid1.Cells [1,3]);//ввод значений в поле для погрешностей volt4 := StrToFloat (StringGrid1.Cells [1,4]);// volt5 := StrToFloat (StringGrid1.Cells [1,5]);//------------------------------------ aa1:= StrToFloat (StringGrid2.Cells [1,1]); aa2:= StrToFloat (StringGrid2.Cells [1,2]); aa3:= StrToFloat (StringGrid2.Cells [1,3]); aa4:= StrToFloat (StringGrid2.Cells [1,4]); aa5:= StrToFloat (StringGrid2.Cells [1,5]); //расчет погрешностей if (sTT1>aSHk2) then pog2:=sTT1-aSHk2 else pog2:= aSHk2-sTT1; if (sP323>aSHk3) then pog3:=sP323-aSHk3 else pog3:=aSHk3-sP323; if (sB338>aSHk2) then pog4:=sB338-aSHk2 else pog4:=aSHk2-sB338; if (sBK79>aSHk2) then pog5:=sBK79-aSHk2 else pog5:=aSHk2-sBK79; //проверка показаний if (aa1 = 0) and (aa2 = sTT1) and (aa3 = sP323) and (aa4 = sB338) and (aa5 = sBK79) then MessageDlg('Все верно', mtInformation, [mbOK], 0) MessageDlg('Сопоставлено неверно', mtError, [mbOK], 0); //проверка погрешностей if (volt1=0) and (volt2=pog2) and (volt3=pog3) and (volt4=pog4) and (volt5=pog5)then MessageDlg('Все верно', mtInformation, [mbOK], 0) else MessageDlg('Сопоставлено неверно', mtError, [mbOK], 0); end;
|
|