求助string转换的问题和长型数字显示的问题(50分)

  • 主题发起人 主题发起人 394558739
  • 开始时间 开始时间
3

394558739

Unregistered / Unconfirmed
GUEST, unregistred user!
由于项目需要,必须采用编号来管理,编号的格式是:
000+000+000+000+000+.....(如:001007001001001001001001)
但采用StrToInt64或StrToInt64def将Sstring转成integer,编号过长时就出错,如下:
procedure TForm1.Button6Click(Sender: TObject);
var
Ni:string;
begin
NI:='001007001001001001001001';
Edit6.Text:=inttostr(0)+inttostr(0)+inttostr(StrToInt64(Ni)+1);
end;
结果得到出现“is not a valid integer value 错误”。
procedure TForm1.Button7Click(Sender: TObject);
var
Ni:string;
begin
NI:='001007001001001001001001';
Edit6.Text:=inttostr(0)+inttostr(0)+inttostr(StrToInt64DEF(Ni,0)+1);
end;
结果得到不是“001007001001001001001002”而是“001”,我要的是
“001007001001001001001002”。
综合上述我应怎样处理,怎样才能让Edit6.Text正确显示"001007001001001001001002"。
 
.....-_- 你这个编号太长了,已经超过int64能够表示的范围了,自然不能转换为数字
建议你换一种编号规则......
比如把编号改成16进制,或者直接用标示码+时间来表示精确到毫秒的全长度时间足够你产生不重复编码了formatdatetime('yyyymmddhhsszzz',now);
 
楼主啊,您真是太有才啦!把一个天文数字般的字符串先转化为整数,加个1,然后又转化回字符串。不就是加个1么?用不着超级计算机吧?
procedure TForm1.Button1Click(Sender: TObject);
var
NI: string;
len, i, code: Integer;
begin
NI := '001007001001001001001001';
len := Length(NI);
Val(Copy(NI, len - 2, 3), i, code);
Edit6.Text := Copy(NI, 1, len - 3) + Format('%.3d', [i + 1]);
end;
注:既然你们是三位一组的编码,我相信每段分项目的最大容量是999,否则制定编码规则这个人应该喝点脑白金了。
 
外行设计的编码而已.LS正解
 
还是vvyang有才,正解了.
每三位数为一组编号,代表了treeView的每一级,
001为第一级,当级节点编号为001-999,级中最大只能有999个节点(999个够用了);
001001为第二级,当级节点编号为001001-999999,级中最大只能有999个节点(999个够用了);
........
最大只能有50级,50级的话,编号就很很长了001001001001001001001001001001001........001;
 
To 394558739:
那就闲话少说,快点结贴吧!
 
转换思路,不要死抠.结贴
 
用formatfloat()函数
 
多人接受答案了。
 
后退
顶部