function covMoneyTORMB(money: Real): String;
const
  numList:array[0..9] of String=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
  rmbList:array[0..14] of string= ('分','角','元','拾','佰','仟','万','拾','佰','仟','亿','拾','佰','仟','万');
var
  n,numLen,numChar:integer;
  numstr,rmb,n1,n2,hz:string;
begin
  Result:='';
  If money > 9999999999999.99 Then
  begin
     result:='超出范围的人民币值';
     Exit;
  end;
  money:=RoundEx(money);
  numstr:= FloatToStr(money * 100);
  numLen:= Length(numstr);
  n:=1;
  While n <= numLen do
  begin
    numChar:= StrtoInt(middle_str(numstr, n, 1));
    n1:= numList[numChar];
    n2:= rmbList[numLen - n];
    If Not (n1='零') Then
       hz:= hz + n1 + n2
    Else
    begin
       If (n2 ='亿') Or (n2 = '万') Or (n2 = '元') Or (n1 = '零') Then
       While right_str(hz, 2) ='零' do
       begin
         hz:=left_str(hz,Length(hz)-2);
       end;
       If ((n2 = '亿') Or ((n2 = '万') And (right_str(hz, 2) <> '亿')) Or (n2 = '元')) Then
         hz:= hz + n2
       Else
       If (left_str(right_str(hz, 4), 2)='零') Or (right_str(hz, 2) <> '亿') Then
           hz:= hz + n1;
    end;
    n:= n + 1;
  end;
  While (right_str(hz, 2)= '零')  Do
    hz:= left_str(hz, Length(hz) - 2);
  If (right_str(hz, 2) = '元') Then
      hz:= hz + '整';
  If (right_str(hz, 2) = '角') Then
    hz:= hz + '整';
 Result:= hz;
end;

解决方案 »

  1.   

    RoundEx  middle_str left_str这3个函数通不过啊.老大解决一下.你自己先编译一下好吗.
      

  2.   

    function toChineseCapitalMoney(const Num:double):string;
    const
       mnUnit:string='分角元';
       hzUnit:string='拾佰仟万拾佰仟亿拾佰仟万拾佰仟';
       hzNum:string='零壹贰叁肆伍陆柒捌玖';
    var
       szChMoney,szNum:string;
       iLen, iNum, iAddZero,i:integer;
    begin
       iAddZero:=0;
       szNum:=FormatFloat('0', Num*100.0); //这样可能会有数字误差,double只有15位有效数字,这里只有13
       Result:='';
       iLen:=Length(szNum);
       if Pos('E',UpperCase(szNum))>0  then exit;
       if (iLen>18) or (iLen=0) or (Num<0) then exit; //数据错误返回   for i:=1 to iLen do
       begin
          iNum:=StrToInt(copy(szNum,i,1));
          if iNum=0 then
          begin
             if (((iLen-i-2) mod 4)=0) and ((iLen-i-3)>0) and (((iLen-i)>=8) or (iAddZero<3)) then
                szChMoney:=copy(szChMoney+hzUnit,((iLen-i-3) mod 8)*2+1,2);
             inc(iAddZero);
          end
          else
          begin
             if ((iAddZero>0) and ((iLen-i)>=2)) and (((iLen-i-1) mod 4)<>0) then
                szChMoney:=szChMoney+copy(hzNum,1,2);
             szChMoney:=szChMoney+copy(hzNum,iNum*2+1,2);
             iAddZero:=0;
          end;
          if (iAddZero<1) or ((iLen-i)=2) then
             if (iLen-i)>=3 then
             begin
                szChMoney:=szChMoney+copy(hzUnit,((iLen-i-3) mod 8)*2+1,2);
             end
          else
             szChMoney:=szChMoney+copy(mnUnit,((iLen-i) mod 3)*2+1,2);
       end;
       if Trim(szChMoney)=''  then
          szChMoney:='零元整'
       else
         if copy(szNum,Length(szNum),1)='0' then szChMoney:=szChMoney+'整';
       Result:=szChMoney;
    end;