00129张富昌          688512090120001504360000000020976630121196403172811
00129张富昌          688512090120001504360000002097.6630121196403172811
上面一行的20976是EXCEL表里的数据,实际是20.976,导出后我的成了20976,我要实现的是像下面一行的2097.6 也就是小数点往后移两位,而且中间的8个0要少2个0,代码如何实现,我的导出按钮的代码是
procedure TFormdrdf.BitBtn6Click(Sender: TObject);
var
  tfile: TextFile;
  i: Integer;
 
 
begin
assignfile(tfile,'d:\d2.txt');
rewrite(tfile);
 begin
ADOQuery1.first;
    for   i:=1   to   ADOQuery1.recordcount   do
 begin
      write(tfile, Format('%.5d',[i])+ADOQuery1.fieldbyname('id').AsString);
       write(tfile, Format('%-16s',[ADOQuery1.fieldbyname('姓名').AsString]) );
       write(tfile, ADOQuery1.fieldbyname('帐号').AsString+ '00000000');
      write(tfile, StringReplace(ADOQuery1.fieldbyname('金额').AsString,'.','',[rfReplaceAll]) );
      writeln(tfile,ADOQuery1.fieldbyname('身份证号').AsString);
       ADOQuery1.next;
   end;
  end;
    closefile(tfile);
     MessageBox(GetActiveWindow(), '数据处理完毕,已保存到D盘,文件名为:dfgz.txt', '导出提醒', MB_OK +
        MB_ICONWARNING);
end;
我这里的帐号后面是用的8个0作占位,(已就是如果小数点后面有三位,就要把小数点往后移两位,如果小数点后面只有两位,则要把小数点去掉)如果把小数点往后移了两位,这8个0还得少两个0,金额字段我替换小数点了,好像这里也得改吧,如果改这个代码呢?

解决方案 »

  1.   

    被你的描述绕晕了  :)
    你说的8个'0'占位应该是金额的位置吧!
    -------------------------
    下边的例子相当于你的一次for内循环结果, 看一下是否是你想要的
    procedure TForm8.btn1Click(Sender: TObject);
      Function Fillstr(const s : string; const count : integer):string;
      var i : integer;
      begin
        Result := '';
        for i := 1 to count do
          Result := result + s
      end;
    const
      ID = 129;
      NAME = '张富昌';
      ACCOUNT = '68851209012000150436';
      MONEY = 20.976;
      UID = '630121196403172811';
      Money_Len = 12; //金额串的存放长度
    var
      s, sMoney : string;begin
      sMoney := CurrToStr(MONEY * 100);
      sMoney := Fillstr('0', Money_Len - Length(sMoney)) + sMoney;
      s := Format('%.5d', [ID]) +
           Format('%-16s',[NAME]) +
           ACCOUNT +
           sMoney +
           UID;
      ShowMessage(s);
    end;