我有一个问题求助大家:怎么样将数据库表中的string转化为double 
怎么样些程序,数据库为sql2000 。表定义为string,表中的数据很杂:有汉字,整数,小数小数点等
现在想吧它化为double,也就是说保留其中的数字。求助。谢谢!

解决方案 »

  1.   

    这是假设字符串只分为两段,一段是汉字部分 ,一段是数字部分,
    而提取数据的部分如下:
    function GetNumber(const Str:string):double;
    var i:integer; Numstr:string;
    begin
      for i:=1 to length(Str) do
      begin
        if str[i] in ['0'..'9','.'] then
           Numstr:=Numstr+str[i];
      end;
      result:=strtoFloat(Numstr);
    end;
      

  2.   

    procedure Tlgsfzf.SB_confirmClick(Sender: TObject);
    var  s1,ss:string;
        i,j:integer;begin
      SB_confirm.Enabled:=false;
      SB_cancel.Enabled:=true;
      CDload.Close;
      CDload.CommandText:='select part_amount from '+DatabaseName+'SC_art_card ';
      CDload.Open;
      CDload.First;
      while not CDload.Eof do
      begin
        try
          s1:='';
          ss:=CDload.fieldbyname('part_amount').asstring;
          if length(ss)>1 then
          begin
            if (ord(byte(ss[length(ss)]))>=31) and (ord(byte(ss[length(ss)]))<= 39) or (ord(byte(ss[length(ss)]))= 46) then
                j:=length(ss)-1
            else
                j:=length(ss);
            for i:=1 to j do
              begin
                s1:=s1+chr(ord(byte(ss[i])));
              end;
          end;
          //s1:=copy(ss,1,s1);
          CDload.Edit;
          CDload.fieldbyname('part_amount').asstring:=s1;
        except
       end;
        CDload.Next;
      end;
      CDload.ApplyUpdates(-1);
    我是这样写的,请大家看看有什么问题
      

  3.   

    procedure Tlgsfzf.SB_confirmClick(Sender: TObject);
    var  ss,s1,result:string;
         i,j:integer;
         ps: array[0..9] of char;
    begin
      SB_confirm.Enabled:=false;
      SB_cancel.Enabled:=true;
      CDload.Close;
      CDload.CommandText:='select part_amount from '+DatabaseName+'SC_art_card ';
      CDload.Open;
      CDload.First;
      while not CDload.Eof do
      begin
        try
          s1:='';
          ss:=CDload.fieldbyname('part_amount').asstring;
          if length(ss)>1 then
          begin
            for i:=1 to length(ss) do
              if ((ss=ps)or (pos(',',ss)>0)) then
              s1:=s1+ss
              else s1:=s1;
          end;
          result:=s1;
          //s1:=copy(ss,1,s1);
          CDload.Edit;
          CDload.fieldbyname('part_amount').asstring:=result;
        except
       end;
        CDload.Next;
      end;
      CDload.ApplyUpdates(-1);
    end.
    还有这种写法,大家看有什么问题。