Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.10.2013, 10:10
roma88 roma88 вне форума
Прохожий
 
Регистрация: 16.10.2013
Сообщения: 1
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию 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  
Старый 16.10.2013, 10:42
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Ром, скажу откровенно, так считать - зло.
Но, в твоём случае можно использовать 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  
Старый 16.10.2013, 11:19
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Если эти данные из БиДе берутся, то лучше в запрос добавить подсчет суммы.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #4  
Старый 16.10.2013, 13:03
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Определьсь с индексами i,j; какой из них строка, а какой столбец.
в строке 16 - первый индекс i, второй j

Код:
strtoint(stringgrid1.Cells[i,j]) 

в строке 19 - второй индекс i
Код:
stringgrid1.Cells[9,i]:=  

по синтаксису
Код:
 property Cells[ACol, ARow: Integer]: string
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:53.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter