有兄弟提供下delphi编写好的函数 我在FASTREPORT 可以直接调用 
我现在  CONVERT 是转换大写的函数 所有都是到元角分,但是现在不想要
var AStr:WideString;   //中文要用宽字符
    yPos,i:integer;
begin    try
      AStr:=Convert(StrToFloat(formatfloat('0.00',<frxDBDataset1."shkje">)));
     for i:=1 to  length(formatfloat('0.00',<frxDBDataset1."shkje">)) do begin     //取得非零的位置
         if strtofloat(copy(formatfloat('0.00',<frxDBDataset1."shkje">),i,length(formatfloat('0.00',<frxDBDataset1."shkje">))-i+1))=0 then   break;    end;      case length(formatfloat('0.00',<frxDBDataset1."shkje">))+1-i of
      0,1,2:daxiejine.memo.add(AStr);
      3:daxiejine.memo.add(copy(AStr,1,(i-1)*2)+'整');
      4,5,6,7:daxiejine.memo.add(copy(AStr,1,(i-1)*2)+'元整');
      8,9,10:daxiejine.memo.add(copy(AStr,1,(i-1)*2)+'万元整');
      11:daxiejine.memo.add(copy(AStr,1,(i-1)*2)+'元整');
      12,13,14,15:daxiejine.memo.add(copy(AStr,1,(i-1)*2)+'亿元整');     end; 
    except
    ShowMessage('无效的数据!请重试');
    end;在FASTREPORT  WIDESTRING不能通过我对大写的要求是 后面有小数 就显示元角分,没有就直接现在是多少元整!
望哪位兄直接给我段DELPIHI 函数 在FASTreport 调用就可以 谢谢!!

解决方案 »

  1.   

    也是网上下的一起在用{
    Calendar Unit for Borland Delphi 5 (Other Version is not tested)Translated By Liu Ru Xu ([email protected]) 2001-1-4
    }{
    Announcement from the original author:***************************************************************************
       致看到这些源代码的兄弟:
           你好!
           这本来是我为一个商业PDA产品开发的日历程序,最近移植于PC机上, 所以算法
       和数据部分是用纯C++写的,不涉及MFC,所有的代码都是以短节省存储空间为主要目
       的.
       很高兴你对这些代码有兴趣,你可以随意复制和使用些代码,唯一有一点小小的
       愿望:在你使用和复制给别人时,别忘注明这些代码作者:-)。程序代码也就罢了,后
       面的数据可是我辛辛苦苦从万年历上找出来输进去的。
       如果你有什么好的意见不妨Mail给我。       [email protected]
       或
       [email protected]
                                                                     2000年3月
    ****************************************************************************
    }unit crash_rmb;interfaceuses SysUtils,Windows;var
      ls:variant;    function crashrmb(ls: Variant): string;   //1.定义函数num_str
    implementationfunction crashrmb(ls: Variant): string;   //1.定义函数num_str
    var
      dx_sz, dx_dw, str_int, str_dec, dx_str, fu: string;
      a, b, b2, c, d: string;
      num_int, num_dec, len_int, i, a_int, pp: integer;
     //dx_str为返回字符串
     begin
      dx_sz := '零壹贰叁肆伍陆柒捌玖';
      dx_dw := '万仟佰拾亿仟佰拾万仟佰拾元';
     //处理金额小于零情况
      if ls < 0 then
      begin
        ls := ls*(-1);
        fu := '负';
      end else fu := '';
     //取得整数值及整数串
      dx_str := ls;
      if (ls > 0) and (ls < 1) then dx_str := '0' + dx_str;
      pp := pos('.', dx_str);
      if pp > 0 then str_int := copy(dx_str, 1, pos('.', dx_str)-1)
      else str_int := dx_str;
      num_int := strtoint(str_int);
     //取得小数值及小数串
      if (ls > 0) and (ls < 1) then num_dec := ls*100
      else num_dec := (ls-num_int)*100;
      str_dec := inttostr(num_dec);
      len_int := Length(str_int);
      dx_str := '';
     //转换整数部分
      for i := 1 to len_int do
      begin
     //a为小写数字字符,b为对应的大写字符
     //c为对应大写单位,d为当前大写字符串的最后一个汉字
        a := copy(str_int, i, 1);
        a_int := strtoint(a);
        b := copy(dx_sz, (a_int * 2 + 1), 2);
        c := copy(dx_dw, ((13 -len_int + i-1)* 2 + 1), 2);
        if dx_str <> '' then
          d := copy(dx_str, Length(dx_str)-1, 2)
        else d := '';
        if (b = '零') and ((d = '零') or (b = b2) or (c = '元') or (c = '万') or (c = '亿')) then b := '';
        if (a = '0') and (c <> '元') and (c <> '万') and (c <> '亿') then c := '';
        if ((c = '元') or (c = '万') or (c = '亿')) and (d = '零') and (a = '0') then
        begin
          dx_str := copy(dx_str, 1, Length(dx_str)-2);
          d := copy(dx_str, Length(dx_str)-1, 2);
          if ((c = '元') and (d = '万')) or ((c = '万') and (d = '亿')) then c := '';
        end;
        dx_str := dx_str + b + c; b2 := b;
      end;
     //处理金额小于1的情况
      if Length(dx_str) <= 2 then dx_str := '';
     //转换小数部分
      if (num_dec < 10) and (ls > 0) then
      begin
        a_int := strtoint(str_dec);
        b := copy(dx_sz, (a_int*2 + 1), 2);
        if num_dec = 0 then dx_str := dx_str + '整';
        if num_dec > 0 then dx_str := dx_str + '零' + b + '分';
      end;
      if num_dec >= 10 then
      begin
        a_int := strtoint(copy(str_dec, 1, 1));
        a := copy(dx_sz, (a_int*2 + 1), 2);
        a_int := strtoint(copy(str_dec, 2, 1));
        b := copy(dx_sz, (a_int*2 + 1), 2);
        if a <> '零' then a := a + '角';
        if b <> '零' then b := b + '分'
        else b := '';
        dx_str := dx_str + a + b;
      end;
      if ls = 0 then dx_str := '零元整';
      dx_str := fu + dx_str;
     //函数返回字符串
      Result := dx_str;
    end;
    { 2.调用方法
     函数参数采用Variant类型,调用时参数值可以是实型,也可以是字符串,非常方便,下面举
    例说明:
     新建窗口,在相应pas文件中加入num_str函数,并在窗口中添加Button1和Edit1、Edit2控件,双击Button1输入以下代码,运行程序即可:
      procedure TForm1.Button1Click(Sender: TObject);
      begin
      Edit1.text:=num_str(202055010.32);
      //也可以在Edit2中输入数串调用
      //Edit1.text:=num_str(Edit2.text);
      end;
    }
    end.
      

  2.   


    function CN_rmb_nl(Num: string): WideString;
    const
      cNum:WideString='零壹贰叁肆伍陆柒捌玖-万仟佰拾亿仟佰拾万仟佰拾元角分';
      cCha:array[0..1,0..11]of string=
           (('零仟','零佰','零拾','零零零','零零','零亿','零万','零元','亿万','零角','零分','零整'),
           ('零','零','零','零','零','亿','万','元','亿','零','整','整'));
    var
      i:Integer;
      S,sNum:WideString;
      nNum:Real;
    begin
      if Num='' then
      begin
       Result:=' ';
       exit;
      end;
      if Num='0' then
      begin
       Result:='人民币零元(¥0.00)';
       exit;
      end;  try
        nNum:=StrToFloat(Num);
        sNum:=FormatFloat('0',nNum*100);
        for i:=1 to Length(sNum) do
          S:=S+ cNum[ord(sNum[i])-47]+cNum[26-Length(sNum)+i];
        for i:= 0 to 11 do //去掉多余的零
          S:=StringReplace(S,cCha[0,i],cCha[1,i],[rfReplaceAll]);    S:='人民币'+S;
        Result:=S;
      except
        Result:=' ';
      end;
    end;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    procedure TDM.DataModuleCreate(Sender: TObject);  //需在UserFunction处定义函数
    begin
      frxReport_1.AddFunction('function CN_rmb_nl(Num:string):WideString;','Myfunction1','人民币中文大写转换(不带小写)');
    end;然后便可直接在报表中[cn_rmb_nl(11)]调用
      

  3.   

    http://www.tansoo.cn/default.asp?tag=%E5%A4%A7%E5%86%99%E9%87%91%E9%A2%9D
      

  4.   

    好长的代码orz。。还是finereport无编程量比较适合我用,哈哈。