delphi 如何将 例如:4940转换成肆仟玖佰肆拾,后面不能跟着有零或者其他的元整之类...就是好像说是70000 就是转换为柒万这样。

解决方案 »

  1.   

    我记得有公式的说用 mod 取余数 然后填进去.
    4940 div 1000 = 4 -> 肆仟4940 mod 1000 = 940 div 100 = 9 ->玖佰
      

  2.   

    上面的思路可以,主要要注意处理类似 4904的写法 :肆仟玖佰零肆下面有个现成的,不过没有测试。http://www.cnblogs.com/newtekboy/archive/2010/05/23/1742088.html
      

  3.   

    这个好像更简洁
    function MoneyConvert(mmje:real): string;
    const
      s1: string = '零壹贰叁肆伍陆柒捌玖';
      s2: string = '分角元拾佰仟万拾佰仟亿拾佰仟万';
      function StrTran(const S, s1, s2: string): string;
      begin
        Result := StringReplace(S, s1, s2, [rfReplaceAll]);
      end;
    var
      S, dx: string;
      i, Len: Integer;
    begin
      if mmje < 0 then
      begin
        dx := '负';
        mmje := -mmje;
      end;
      S := Format('%.0f', [mmje * 100]);
      Len := Length(S);
      for i := 1 to Len do
        dx := dx + Copy(s1, (Ord(S[i]) - Ord('0')) * 2 + 1, 2) + Copy(s2, (Len - i)* 2 + 1, 2);
      dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零仟', '零'), '零佰','零'),'零拾', '零'), '零角', '零'), '零分', '整');
      dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零零', '零'), '零零','零'),'零亿', '亿'), '零万', '万'), '零元', '元');
      if dx = '整' then
        Result := '零元整'
      else
        Result := StrTran(StrTran(dx, '亿万', '亿零'), '零整', '整');
    end;
      

  4.   

    http://topic.csdn.net/t/20011218/10/427440.htmlhttp://topic.csdn.net/t/20020622/13/822698.htmlhttp://topic.csdn.net/t/20020325/10/597619.html《程序开发范例宝典》第742页
      

  5.   

    //金额小写转大写----------------------------------------------------------------
    class function TStrOper.MoneyConvert(aMoney: real): string;
    const
      s1: string = '零壹贰叁肆伍陆柒捌玖';
      s2: string = '分角元拾佰仟万拾佰仟亿拾佰仟万';
      function StrTran(const S, s1, s2: string): string;
      begin
        Result := StringReplace(S, s1, s2, [rfReplaceAll]);
      end;
    var
      S, dx: string;
      i, Len: Integer;
    begin
      if aMoney < 0 then
      begin
        dx := '负';
        aMoney := -aMoney;
      end;
      S := Format('%.0f', [aMoney * 100]);
      Len := Length(S);
      for i := 1 to Len do
        dx := dx + Copy(s1, (Ord(S[i]) - Ord('0')) * 2 + 1, 2) + Copy(s2, (Len - i)* 2 + 1, 2);
      dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零仟', '零'), '零佰','零'),'零拾', '零'), '零角', '零'), '零分', '整');
      dx := StrTran(StrTran(StrTran(StrTran(StrTran(dx, '零零', '零'), '零零','零'),'零亿', '亿'), '零万', '万'), '零元', '元');
      if dx = '整' then
        Result := '零元整'
      else
        Result := StrTran(StrTran(dx, '亿万', '亿零'), '零整', '整');
    end;我一直在用的。效果还不错。
      

  6.   

    自己改这个函数,或者直接在转换完成的字符串上把最后地元整去掉。
    如:
      if Pos('元整', SourceStr)> 0 then
        SourceStr := Copy(SourceStr,1,Length(SourceStr) - 5);
      

  7.   

    function changeToCap(d:double):string;
    const
      Cons1:array[0..10]of string=('分','角','元','拾','佰','仟','万','拾','佰','仟','亿');
      Cons2:array[0..9]of string=('零','壹','贰','叁','肆','伍','陆','柒','捌','玖');
    var
      i,dd:int64;
      jj:double;
      str:string;
    begin
       i:=0;dd:=0;str:='';
       jj:=d*100;
       dd:=Trunc(jj);
       repeat
         str:=Cons2[dd mod 10]+Cons1[i]+str;
         Inc(i);
         if i=11 then
            i:=7;
         dd:=dd div 10;
       until dd*10=0;
       Result:=str;
    end;
    这是我的算法