|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
is not valid integer value
Здравствуйте.
Есть Stringgrid из 9 столбцов(Группа, Фамилия, Математика, Физика, ОАиП, ООП, БД, уч в общ жизни, Стипендия) Делаю расчет стипендии в последнем столбце. Запускаю цикл на проверку значений с 3 столбца и второй стоки(там числа), все компилируется, но когда наживаю Рассчитать стипендию, то выдает ошибку is not valid integer value, как я понимаю он не находит числовых значений в StringGrid-е, но там у меня числа, и пустых строк нет. У кого какие идеи? В чем проблема? Код:
procedure TForm1.BitBtn4Click(Sender: TObject); var i, j, k5, k4, k3: integer; s: double; begin s:=StrToFloat(Edit1.Text); for i:=3 to stringgrid1.ColCount do begin for j:= 2 to stringgrid1.RowCount do begin k5:=0; k4:=0; k3:=0; if strtoint(stringgrid1.Cells[i,j]) = 5 then k5:=k5+1 else if strtoint(stringgrid1.Cells[i,j]) = 4 then k4:=k4+1 else if strtoint(stringgrid1.Cells[i,j]) = 3 then k3:=k3+1; if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[8,i])=1) then begin stringgrid1.Cells[9,i]:=FloatToStr(s+s/2); end else if (k5=5)and(k4=0)and(k3=0)and(strtoint(stringgrid1.Cells[8,i])=0) then begin stringgrid1.Cells[9,i]:=FloatToStr(s+s/4); end else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=0) then begin stringgrid1.Cells[9,i]:=FloatToStr(s); end else if ((k5<5)or(k5>0))and((k4<5)or(k4>0))and(k3=1)and(strtoint(stringgrid1.Cells[8,i])=1) then begin stringgrid1.Cells[9,i]:=FloatToStr(s); end else stringgrid1.Cells[9,i]:='Нет'; end; end; end; |
#2
|
||||
|
||||
Ром, скажу откровенно, так считать - зло.
Но, в твоём случае можно использовать StrToIntDef(Строка, 0); Ноль будет возвращаться в том случае, если конвертировать строку не получится. Код:
for i:=3 to stringgrid1.ColCount-1 do // по всем предметам, кроме учебных работ begin for j:= 2 to stringgrid1.RowCount do // по всем ученикам begin ok := Boolean(StrToInt(stringgrid1.Cells[8,j])); if stringgrid1.Cells[i,j] = '3' and ok then k := 1.00 // если появилась хоть одна тройка, но всё ок с общ работой, то степуха будет else if stringgrid1.Cells[i,j] = '4' then k := 1.25 // если троек нет, но есть 4ка то степухе + 25% else k := 1.5; // если ни 3ек ни 4ок и с работой ок то к степухе 50% end; stringgrid1.Cells[9,i] := FormatFloat('0.00', StrToFloat(Edit1.Text) * k); end; Последний раз редактировалось Uniq!, 16.10.2013 в 11:09. |
#3
|
||||
|
||||
Если эти данные из БиДе берутся, то лучше в запрос добавить подсчет суммы.
— Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#4
|
|||
|
|||
Определьсь с индексами i,j; какой из них строка, а какой столбец.
в строке 16 - первый индекс i, второй j Код:
strtoint(stringgrid1.Cells[i,j]) в строке 19 - второй индекс i Код:
stringgrid1.Cells[9,i]:= по синтаксису Код:
property Cells[ACol, ARow: Integer]: string |