现在的位置: 首页 > 综合 > 正文

FastReport人民币大写转换

2012年12月07日 ⁄ 综合 ⁄ 共 2122字 ⁄ 字号 评论关闭

function MoneyToCharacter(Money:real):string; //数字转换为中文大写
var
    temp:string;
    resu:string;
    i,j:integer;
    len:integer;
    Num:array[0..9] of string;
    A:array[0..13] of string;
begin
     Num[0]:='零';
     num[1]:='壹';
     Num[2]:='贰';
     num[3]:='叁';
     Num[4]:='肆';
     num[5]:='伍';
     Num[6]:='陆';
     num[7]:='柒';
     Num[8]:='捌';
     num[9]:='玖';
     a[0]:='分';
     a[1]:='角';
     a[2]:='元';
     a[3]:='拾';
     a[4]:='佰';
     a[5]:='仟';
     a[6]:='万';
     a[7]:='拾';
     a[8]:='佰';
     a[9]:='仟';
     a[10]:='亿';
     a[11]:='拾';
     a[12]:='佰';
     a[13]:='仟';

     temp:=trim(inttostr(round(money*100)));
     len:=length(temp);
     resu:='';
     if (len>13) or (len=0) then
       begin
         exit;
       end;
     for i:=1 to len do
     begin
         j:=strtoint(copy(temp,i,1));
         resu:=resu+num[j]+a[len-i];
     end;
     result:=resu;
end;

调用方法:

Memo2.text:=MoneyToCharacter(sum(<frxDBDataset1."Amount">));

或 MoneyToCharacter(3654.63);

另:

void   fnFloatToRMB(float   Money)  
  {                  
                    String   sRMBUnit="分角元拾佰仟万拾佰仟亿拾百";  
  String   sRMBNumber="零壹贰叁肆伍陆柒捌玖";  
  String   sMoney,sRMBMoney,sChar,sNumber,sUnit;  
  int iMoneyLength,iPosDecimal;  
  float fAfterDecimal; //小数部分  
  int iBeforeDecimal; //整数部分  
  bool   bIsZeroEnd;  
   
  iBeforeDecimal=Money;  
  fAfterDecimal=fabs(Money-iBeforeDecimal);  
  if(fAfterDecimal   >   0   || Money ==   0)  
  {  
  sRMBMoney="";  
  }  
  else  
  {  
  sRMBMoney="整";  
  }  
   
  sMoney=FormatFloat("0.00",Money);  
  //删除小数点  
  iPosDecimal =sMoney.Pos(".");  
  if(iPosDecimal   >   0)  
  sMoney=sMoney.Delete(iPosDecimal,1);  
  iMoneyLength=sMoney.Length();  
   
  int i=0;  
  bIsZeroEnd=true;  
  while(iMoneyLength>0)  
  {  
  i++;  
  sChar=sMoney.SubString(iMoneyLength,1);  
  if(sChar=="-")  
  {  
  sNumber="负";  
  sUnit="";  
  }  
  else  
  {  
  sNumber=sRMBNumber.SubString(StrToInt(sChar)*2+1,2);  
  sUnit=sRMBUnit.SubString(i*2-1,2);  
  if(sChar=="0")  
  {  
  if(i!=3 &&   i!=7 &&   i!=11) sUnit="";  
  if(bIsZeroEnd ||   i==3 ||   i==7 ||   i==11) sNumber="";  
  if(fabs(Money)<1   && i<=3){sUnit="";sNumber="";}  
  bIsZeroEnd=true;  
  }  
  else   bIsZeroEnd=false;  
  if(sChar=="1")  
  {  
  if((i==sMoney.Length()   || (i==sMoney.Length()-1 &&   Money<0))  
  &&   (i==2|| i==4   || i==8))  
  sNumber="";  
  }  
  }  
  sRMBMoney=sNumber+sUnit+sRMBMoney;  
  iMoneyLength--;  
  }  
  return   sRMBMoney;  
  }

抱歉!评论已关闭.