前段时间问过一次,有人给了我几段代码,不过都有问题,如100000000就转成了壹亿零千万零百万......  还有就是10100000这种中间没有百万的或千万的,下面的JAVASCRIPT的代码我有的函数看不懂,不会改,哪位朋友能帮我改成DELPHI的,这个有个小BUG,一亿会转成“壹亿万元整”,多了个万字,谁能帮我改掉就更好了,分不够再加代码如下:
<SCRIPT LANGUAGE="JavaScript">
<!--function Arabia_to_Chinese(Num){
 for(i=Num.length-1;i>=0;i--)
 {
  Num = Num.replace(",","")//替换tomoney()中的“,”
  Num = Num.replace(" ","")//替换tomoney()中的空格
 }
 Num = Num.replace("¥","")//替换掉可能出现的¥字符
 if(isNaN(Num)) { //验证输入的字符是否为数字
  alert("请检查小写金额是否正确");
  return;
 }
 //---字符处理完毕,开始转换,转换采用前后两部分分别转换---//
 part = String(Num).split(".");
 newchar = ""; 
 //小数点前进行转化
 for(i=part[0].length-1;i>=0;i--){
 if(part[0].length > 10){ alert("位数过大,无法计算");return "";}//若数量超过拾亿单位,提示
  tmpnewchar = ""
  perchar = part[0].charAt(i);
  switch(perchar){
    case "0": tmpnewchar="零" + tmpnewchar ;break;
    case "1": tmpnewchar="壹" + tmpnewchar ;break;
    case "2": tmpnewchar="贰" + tmpnewchar ;break;
    case "3": tmpnewchar="叁" + tmpnewchar ;break;
    case "4": tmpnewchar="肆" + tmpnewchar ;break;
    case "5": tmpnewchar="伍" + tmpnewchar ;break;
    case "6": tmpnewchar="陆" + tmpnewchar ;break;
    case "7": tmpnewchar="柒" + tmpnewchar ;break;
    case "8": tmpnewchar="捌" + tmpnewchar ;break;
    case "9": tmpnewchar="玖" + tmpnewchar ;break;
  }
  switch(part[0].length-i-1){
    case 0: tmpnewchar = tmpnewchar +"元" ;break;
    case 1: if(perchar!=0)tmpnewchar= tmpnewchar +"拾" ;break;
    case 2: if(perchar!=0)tmpnewchar= tmpnewchar +"佰" ;break;
    case 3: if(perchar!=0)tmpnewchar= tmpnewchar +"仟" ;break;
    case 4: tmpnewchar= tmpnewchar +"万" ;break;
    case 5: if(perchar!=0)tmpnewchar= tmpnewchar +"拾" ;break;
    case 6: if(perchar!=0)tmpnewchar= tmpnewchar +"佰" ;break;
    case 7: if(perchar!=0)tmpnewchar= tmpnewchar +"仟" ;break;
    case 8: tmpnewchar= tmpnewchar +"亿" ;break;
    case 9: tmpnewchar= tmpnewchar +"拾" ;break;
  }
  newchar = tmpnewchar + newchar;
 }
 //小数点之后进行转化
 if(Num.indexOf(".")!=-1){
 if(part[1].length > 2) {
  alert("小数点之后只能保留两位,系统将自动截段");
  part[1] = part[1].substr(0,2)
  }
 for(i=0;i<part[1].length;i++){
  tmpnewchar = ""
  perchar = part[1].charAt(i)
  switch(perchar){
    case "0": tmpnewchar="零" + tmpnewchar ;break;
    case "1": tmpnewchar="壹" + tmpnewchar ;break;
    case "2": tmpnewchar="贰" + tmpnewchar ;break;
    case "3": tmpnewchar="叁" + tmpnewchar ;break;
    case "4": tmpnewchar="肆" + tmpnewchar ;break;
    case "5": tmpnewchar="伍" + tmpnewchar ;break;
    case "6": tmpnewchar="陆" + tmpnewchar ;break;
    case "7": tmpnewchar="柒" + tmpnewchar ;break;
    case "8": tmpnewchar="捌" + tmpnewchar ;break;
    case "9": tmpnewchar="玖" + tmpnewchar ;break;
  }
  if(i==0)tmpnewchar =tmpnewchar + "角";
  if(i==1)tmpnewchar = tmpnewchar + "分";
  newchar = newchar + tmpnewchar;
 }
 }
 //替换所有无用汉字
 while(newchar.search("零零") != -1)
  newchar = newchar.replace("零零", "零");
 newchar = newchar.replace("零亿", "亿");
 newchar = newchar.replace("亿万", "亿");
 newchar = newchar.replace("零万", "万");
 newchar = newchar.replace("零元", "元");
 newchar = newchar.replace("零角", "");
 newchar = newchar.replace("零分", ""); if (newchar.charAt(newchar.length-1) == "元" || newchar.charAt(newchar.length-1) == "角")
  newchar = newchar+"整"
// return newchar;
document.frm.num2.value=newchar;
}//-->
</SCRIPT>
各位大哥大姐帮帮忙啊

解决方案 »

  1.   

    送给你个金额转换大写的函数,支持13位function ToBigRMB(RMB: string): string;
    const
      BigNumber='零壹贰叁肆伍陆柒捌玖';
      BigUnit='万仟佰拾亿仟佰拾万仟佰拾元';  {共可表示13位金额}
    var
      nLeft, nRight, lTemp, rTemp, BigNumber1, BigUnit1: string;
      I: Integer;
    begin
      {取整数和小数部分}
      RMB:=FormatCurr('0.00', StrToFloat(RMB));//确保数字小数后有两位数字
      nLeft:=copy(RMB, 1, Pos('.', RMB) - 1);
      nRight:=copy(RMB, Pos('.', RMB) + 1, 2);
      {转换整数部分}
      for I:=1 to Length(nLeft) do
      begin
        BigNumber1:=copy(BigNumber, StrToInt(nLeft[I]) * 2 + 1, 2);
        BigUnit1:=copy(BigUnit, (Trunc(Length(BigUnit) / 2) - Length(nleft) + I - 1) * 2 + 1, 2);
        if (BigNumber1='零') and ((copy(lTemp, Length(lTemp)- 1, 2))='零')then
          lTemp:=copy(lTemp, 1, Length(lTemp) - 2);
        if (BigNumber1='零') and ((BigUnit1='亿') or (BigUnit1='万') or (BigUnit1='元')) then
        begin
          BigNumber1:=BigUnit1;
          if BigUnit1<>'元' then  BigUnit1:='零'  else  BigUnit1:='';
        end;
        if (BigNumber1='零') and (BigUnit1<>'亿') and (BigUnit1<>'万') and (BigUnit1<>'元') then BigUnit1:='';
        lTemp:=lTemp + BigNumber1 + BigUnit1;
      end;
      if Pos('亿万', lTemp)<>0 then Delete(lTemp, Pos('亿万', lTemp) + 2, 2);  {转换小数部分}
      if StrToInt(nRight[1])<>0 then
         rTemp:=copy(BigNumber, StrToInt(nRight[1]) * 2 + 1, 2) + '角';
      if StrToInt(nRight[2])<>0 then
      begin
        if StrToInt(nRight[1])=0 then  rTemp:='零';
        rTemp:=rTemp + copy(BigNumber, StrToInt(nRight[2]) * 2 + 1, 2) + '分';
      end;  Result:=lTemp + rTemp ;
      if lTemp = '元' then Result := rTemp ;
    end;
      

  2.   

    function GetCurrency(number: PChar): string;
    var
    tmpStr: string;
    begin
    SetLength(tmpStr, 255);
    GetCurrencyFormat(LOCALE_SYSTEM_DEFAULT, 0, number, nil, PChar(tmpStr), Length(tmpStr));
    Result := tmpStr;
    end;//example
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    Application.MessageBox(PChar(GetCurrency(PChar(Edit1.Text))), '', MB_OK);
    end;
      

  3.   

    //我写个给你function NumToChar(NumStr: String): String;
         function SmallNumToChar(NumStr: String): String;
         const
              BigChar:array[0..9] of String=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
              BigPerChar:array[0..3] of String=('','拾','佰','仟');
         var
              rl,l,i:Integer;
         begin
              Result:='';
              l:=Length(NumStr);
              for i:=0 to l-1 do
              begin
                   if NumStr[i]<>'0' then
                   begin
                        Result:=Result+BigChar[StrToInt(NumStr[i+1])]
                   end
                   else
                   begin
                        if (NumStr[i+1]<>'0') then
                        begin
                             Result:=Result+BigChar[StrToInt(NumStr[i+1])]
                        end
                   end;
                   if (NumStr[i+1]<>'0') then Result:=Result+BigPerChar[l-i-1];
              end;
              rl:=Length(Result);
              if Copy(Result,rl-1,2)=BigChar[0] then Result:=Copy(Result,1,rl-2);
         end;const
         BigPerChar:array[0..1] of String=('万','亿');
    var
         l:Integer;
    begin
         Result:='';
         NumStr:=Trim(NumStr)+'.';
         NumStr:=Copy(NumStr,1,Pos('.',NumStr)-1);
         if NumStr<>'' then
         begin
              l:=Length(NumStr);
              if l>8 then
              begin
                   Result:=SmallNumToChar(Copy(NumStr,1,l-8))+BigPerChar[1];
                   NumStr:=Copy(NumStr,l-8+1,8);
                   l:=8;
              end;
              if l>4 then
              begin
                   Result:=Result+SmallNumToChar(Copy(NumStr,1,l-4))+BigPerChar[0];
                   NumStr:=Copy(NumStr,l-4+1,4);
                   l:=4;
              end;
              Result:=Result+SmallNumToChar(Copy(NumStr,1,l));
         end;end;
      

  4.   


    function Arabia_to_Chinese(Num:string):string;
    var i:integer;
        h,l,s,t:string;
    begin
      result:='';
      for i:=length(num) downto 1 do
        if (num[i]=',') or (num[i]=#163) then
          num:=copy(num,1,i-1)+copy(num,i+2,length(num)-i);
      try
        strtofloat(num);
      except
        showmessage('转化错误!非数字');
        exit;
      end;
      i:=pos('.',num);
      if i>0 then begin
        h:=copy(num,1,i-1);
        l:=copy(num,i+1,2);
      end
        else
      begin
        h:=num;
        l:='0';
      end;   if length(h)>10 then
       begin
         showmessage('太大!');
         exit;
       end;
       s:='';   for i:=1 to length(h) do
       begin
         t:=copy(num,i,length(num)-i+1);
         case t[1] of
            '0': s:=s+ '零';
            '1': s:=s+ '一';
            '2': s:=s+ '二';
            '3': s:=s+ '三';
            '4': s:=s+ '四';
            '5': s:=s+ '五';
            '6': s:=s+ '六';
            '7': s:=s+ '七';
            '8': s:=s+ '八';
            '9': s:=s+ '九';
         end;
         case length(t) of
         1: s:= s +'元';
         2: s:= s +'十';
         3: s:= s +'佰';
         4: s:= s +'仟';
         5: s:= s +'万';
         6: s:= s +'十';
         7: s:= s +'百';
         8: s:= s +'千';
         9: s:= s +'亿';
         10: s:= s +'十';
       end;
     end;
       for i:=1 to length(l) do
       begin
         t:=copy(l,i,length(l)-i+1);
         case t[1] of
            '0': s:=s+ '零';
            '1': s:=s+ '一';
            '2': s:=s+ '二';
            '3': s:=s+ '三';
            '4': s:=s+ '四';
            '5': s:=s+ '五';
            '6': s:=s+ '六';
            '7': s:=s+ '七';
            '8': s:=s+ '八';
            '9': s:=s+ '九';
         end;
         case length(t) of
         0: s:= s +'';
         1: s:= s +'分';
         2: s:= s +'角';
         end;
      end;
        result:=s;
    end;
    =====================================================反正无聊
    showmessage(Arabia_to_Chinese('¥123,454.789'))
      

  5.   

    我的用例:     ShowMessage(NumToChar('100100100100'));
      

  6.   

    http://borland.mblogger.cn/aiirii/posts/4690.aspx
      

  7.   

    to jinjazz(三个小时上下班):
        非常感谢你为我翻译这段代码,不过没有最后那段也不行哦,转换结果就是我开头说的情况啊