1 (edited by adiziktdy 2018-06-05 11:27:39)

Topic: Как правильно сделать расчет данных в форме?

nHW: string;                //коэфф для расчета согласно формы обучения и специальности
week1,week2: string;   //количество недель в семестрах 1 и 2

begin
   nHW:=SQLExecute('SELECT koef FROM process WHERE id_fo='+IntToStr(idFo)+' AND id_specialn='+IntToStr(idKv));     //0,25
week1:=SQLExecute('SELECT s1   FROM process WHERE id_fo='+IntToStr(idFo)+' AND id_specialn='+IntToStr(idKv));    //17
week2:=SQLExecute('SELECT s2   FROM process WHERE id_fo='+IntToStr(idFo)+' AND id_specialn='+IntToStr(idKv));    //17

//
на форме plan_edit.Edit5.Text = 2
на форме plan_edit.Edit8.Text = 2
//
1-й вариант дает 17, хотя 2*17*0,25+2*17*0,25=18   

plan_edit.Edit1.Value:=StrToInt(plan_edit.Edit5.Text)*StrToInt(week1)*StrToFloat(nHW)+StrToInt(plan_edit.Edit8.Text)*StrToInt(week2)*StrToFloat(nHW);

почему-то количество часов во 2-м семестре считается как 8, а не 9 (8,5 округляется до 9 в первом семестре)

2-й вариант дает 16, 8+8

plan_edit.Edit1.Value:=plan_edit.Edit5.Value*StrToInt(week1)*StrToFloat(nHW)+plan_edit.Edit8.Value*StrToInt(week2)*StrToFloat(nHW);

//
Как добиться правильного результата -18 часов ? Подозреваю, что что-то с неверным назначением типов переменных...

Yana

Re: Как правильно сделать расчет данных в форме?

попробуйте так

    nHW: double;                //коэфф для расчета согласно формы обучения и специальности
    week1,week2: integer;   //количество недель в семестрах 1 и 2
begin
    nHW:=SQLExecute('SELECT koef FROM process WHERE id_fo='+IntToStr(idFo)+' AND id_specialn='+IntToStr(idKv));     //0,25
    week1:=SQLExecute('SELECT s1   FROM process WHERE id_fo='+IntToStr(idFo)+' AND id_specialn='+IntToStr(idKv));    //17
    week2:=SQLExecute('SELECT s2   FROM process WHERE id_fo='+IntToStr(idFo)+' AND id_specialn='+IntToStr(idKv));    //17
    plan_edit.Edit1.Value:=plan_edit.Edit5.Value * week1 * nHW + plan_edit.Edit8.Value * week2 * nHW;
Dmitry.