程序执行后,如果出现小数点数值就会报错,如‘69.5不是一个有效的整型值’,代码如下,错误在哪里
procedure TFm_ZlFp.ToolButton1Click(Sender: TObject);
var
i,j,sum0 :integer;
begin
for i:=4 to SGlist.rowcount-1 do
begin
Sum0:=0;
SGlist.cells[3,i]:= '';
for j:=4 to SGlist.colcount -1 do // 列
begin
if sglist.Cells[j,i]<>'' then
sum0:=sum0+strtoint(sglist.Cells[j,i]);
end;
SGlist.cells[3,i]:= inttostr(sum0);
if strtoint(SGlist.cells[2,i]) <> sum0 then
SGlist.cells[0,i]:='*'
else SGlist.cells[3,i]:=''; end;
end;
procedure TFm_ZlFp.ToolButton1Click(Sender: TObject);
var
i,j,sum0 :integer;
begin
for i:=4 to SGlist.rowcount-1 do
begin
Sum0:=0;
SGlist.cells[3,i]:= '';
for j:=4 to SGlist.colcount -1 do // 列
begin
if sglist.Cells[j,i]<>'' then
sum0:=sum0+strtoint(sglist.Cells[j,i]);
end;
SGlist.cells[3,i]:= inttostr(sum0);
if strtoint(SGlist.cells[2,i]) <> sum0 then
SGlist.cells[0,i]:='*'
else SGlist.cells[3,i]:=''; end;
end;
sum0定义成Double,用StrToFloat吧
直接用StrToFloat也不行啊,sum0不用重新定义么?新人,还希望说的详细点
sum0 :Double;sum0:=sum0+strtofloat(sglist.Cells[j,i]);
var
i,j,sum0,k:integer;if sglist.Cells[j,i]<>'' then
begin
if trystrtoint(sglist.Cells[j,i],k) then
begin
sum0:=sum0+k;
end
else
begin
Showmessage('第'+inttostr(i)+'行'+inttostr(j)+'列输入错误');
exit;
end;
end;
如果出现sglist.Cells[j,i]为空字串,你的函数还是要有问题
可以这样
sum0:=sum0+strtofloatdef(sglist.Cells[j,i], 0);
逻辑问题是没有,但要看实际的数据内容了。