同上!请各位写的详细些!我的邮箱[email protected].

解决方案 »

  1.   

    这是伴水写的一个函数:
    (*//
    标题:中文数字表达
    说明:普通方式和货币方式;和其它算法思路不一样;建议参考比较一下
    设计:Zswang
    日期:2002-01-25
    支持:[email protected]
    //*)///////Begin Source
    function NumberCn(mNumber: Real): WideString;
    const
      cPointCn: WideString =  '点十百千万十百千亿十百千';
      cNumberCn: WideString =  '零一二三四五六七八九';
    var
      I, L, P: Integer;
      S: string;
    begin
      Result := '';
      if mNumber = 0 then begin
        Result := cNumberCn[1];
        Exit;
      end;
      S := FloatToStr(mNumber);
      if Pos('.', S) <= 0 then S := S + '.';
      P := Pos('.', S);
      L := Length(S);
      for I := 1 to L do
        if P > I then
          Result := Result + cNumberCn[StrToInt(S[I]) + 1] + cPointCn[P - I]
        else if P = I then begin
          Result := StringReplace(Result, '零十零', '零', [rfReplaceAll]);
          Result := StringReplace(Result, '零百零', '零', [rfReplaceAll]);
          Result := StringReplace(Result, '零千零', '零', [rfReplaceAll]);
          Result := StringReplace(Result, '零十', '零', [rfReplaceAll]);
          Result := StringReplace(Result, '零百', '零', [rfReplaceAll]);
          Result := StringReplace(Result, '零千', '零', [rfReplaceAll]);
          Result := StringReplace(Result, '零万', '万', [rfReplaceAll]);
          Result := StringReplace(Result, '零亿', '亿', [rfReplaceAll]);
          Result := StringReplace(Result, '亿万', '亿', [rfReplaceAll]);
          Result := StringReplace(Result, '零点', '点', [rfReplaceAll]);
        end else if P < I then
          Result := Result + cNumberCn[StrToInt(S[I]) + 1];
      if Result[Length(Result)] = cPointCn[1] then
        Result := Copy(Result, 1, Length(Result) - 1);
      if Result[1] = cPointCn[1] then Result := cNumberCn[1] + Result;
      if (Length(Result) > 1) and (Result[2] = cPointCn[2]) and
        (Result[1] = cNumberCn[2]) then
        Delete(Result, 1, 1);
    end; { NumberCn }function MoneyCn(mMoney: Real): WideString;
    var
      P: Integer;
    begin
      if mMoney = 0 then begin
        Result := '无';
        Exit;
      end;
      Result := NumberCn(Round(mMoney * 100) / 100);
      Result := StringReplace(Result, '一', '壹', [rfReplaceAll]);
      Result := StringReplace(Result, '二', '贰', [rfReplaceAll]);
      Result := StringReplace(Result, '三', '叁', [rfReplaceAll]);
      Result := StringReplace(Result, '四', '肆', [rfReplaceAll]);
      Result := StringReplace(Result, '五', '伍', [rfReplaceAll]);
      Result := StringReplace(Result, '六', '陆', [rfReplaceAll]);
      Result := StringReplace(Result, '七', '柒', [rfReplaceAll]);
      Result := StringReplace(Result, '八', '捌', [rfReplaceAll]);
      Result := StringReplace(Result, '九', '玖', [rfReplaceAll]);
      Result := StringReplace(Result, '九', '玖', [rfReplaceAll]);
      Result := StringReplace(Result, '十', '拾', [rfReplaceAll]);
      Result := StringReplace(Result, '百', '佰', [rfReplaceAll]);
      Result := StringReplace(Result, '千', '仟', [rfReplaceAll]);
      P := Pos('点', Result);
      if P > 0 then begin
        Insert('分', Result, P + 3);
        Insert('角', Result, P + 2);
        Result := StringReplace(Result, '点', '圆', [rfReplaceAll]);
        Result := StringReplace(Result, '角分', '角', [rfReplaceAll]);
        Result := StringReplace(Result, '零分', '', [rfReplaceAll]);
        Result := StringReplace(Result, '零角', '', [rfReplaceAll]);
        Result := StringReplace(Result, '分角', '', [rfReplaceAll]);
        if Copy(Result, 1, 2) = '零圆' then
          Result := StringReplace(Result, '零圆', '', [rfReplaceAll]);
      end else Result := Result + '圆整';
      Result := '人民币' + Result;
    end; { MoneyCn }
    ///////End Source///////Begin Demo
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Edit1.Text := MoneyCn(StrToFloatDef(Edit3.Text, 0));
      Edit2.Text := NumberCn(StrToFloatDef(Edit3.Text, 0));
    end;
    ///////End Demo
      

  2.   

    //'--------------------------------------------------------------------------------
    //'模块名称:GetChinaFormat
    //'功    能:将小写金额转化为大写金额
    //'参数说明: AMoney 小写金额:string; AZeroStr 零的替换字符:string = '零'; IntegralLen 整数部分的长度:integer = 5
    //'返回参数: 大写金额
    //'注    释: 固定只保留两位小数
    //'作    者: 
    //'时    间:2002-03-30 17:20
    //'修 改 者:(无)
    //'修改日期:(无)
    //'版    权:
    //'--------------------------------------------------------------------------------
    function GetChinaFormat(AMoney :string; AZeroStr :string = '零'; IntegralLen :integer = 5) :string;
    const CHINAFORMATMONEY :string = '万仟佰拾亿仟佰拾万仟佰拾元  角分';
          CHINACAPITALDIGITAL :string = '零壹贰叁肆伍陆柒捌玖';
    var
      Value, Str, DigitalStr :string;
      i :integer;
    begin
      Str := '';
      Value := trim(Format('%' + IntToStr(IntegralLen) + '.2F', [StrToFloat(AMoney)]));
      Value := StringOfChar('0', IntegralLen - Length(Value) + 3) + Value ;
      for i := 1 to Length(Value) do
      begin
        DigitalStr := Copy(Value, i, 1);
        if DigitalStr <> '.' then
        begin
          Str := Str + '  '+ Copy(CHINACAPITALDIGITAL, StrToInt(DigitalStr) * 2 + 1, 2) + '  ' + Copy(CHINAFORMATMONEY, (13 - IntegralLen + i) * 2 - 1, 2);
        end;
      end;
      Result := trim(Str) ;
    end;
      

  3.   

    另外给你一个,我们现在正用的就是这个,符合国家票据和结算标准
     
    Function CovMoney(money : Double) : String; //小写金额转换成大写金额
    Var
      sStr, buf, sPower, buf1 : String;
      i, j, iPosition, lenth, iTmp : Integer;
      flag0 : boolean;   Function Sjoin(Var buff : String; sString : String; digit : String; nextdig : String; iPos : Integer) : Integer;
       Var
         dig : String; // * 1
         flag0 : Boolean;
       Begin
         flag0 := True;     If digit = '0' Then
           If nextdig <> '0' Then
             dig := '零'
           Else
             flag0 := False;
         If digit = '1' Then
           dig := '壹';
         If digit = '2' Then
           dig := '贰';
         If digit = '3' Then
           dig := '叁';
         If digit = '4' Then
           dig := '肆';
         If digit = '5' Then
           dig := '伍';
         If digit = '6' Then
           dig := '陆';
         If digit = '7' Then
           dig := '柒';
         If digit = '8' Then
           dig := '捌';
         If digit = '9' Then
            dig := '玖';     If digit = '0' Then
           If (flag0 = True) And (iPos <> 0) Then
           Begin
             buff := buff + dig;
             Result := 2;
           End
           Else
             Result := 0
         Else
         Begin
           buff := buff + dig;
           buff := buff + sString;
           Result := 4;
         End;
       End;
    Begin
      If money = 0 Then
      Begin
        Result := '零元整';
        exit;
      End;
      iPosition := 0;
      buf1 := trim(Format('%12.2f', [money]));  lenth := Length(buf1);
      buf := '                '; //  16 bit space;
      j := 1;
      For i := 16 - lenth To 15 Do
      Begin
        buf[i] := buf1[j];
        j := j + 1;
      End;  For i := 1 To 15 Do
      Begin
        iTmp := ord(buf[i]);
        If ((iTmp >= 49) And (iTmp <= 58)) Or (chr(iTmp) = ',') Then
          break;
      End;
      While i <= 15 Do
      Begin
        flag0 := True;
        iTmp := 0;
        Case i - 1 Of
          0, 4, 8 : sPower := '仟';
          1, 5, 9 : sPower := '佰';
          2, 6, 10 : sPower := '拾';
          3 :
            Begin
              sPower := '亿';
              If copy(buf, i, 1) = '0' Then
              Begin
                sStr := sStr + sPower+'零';
                iPosition := iPosition + 2;
                iTmp := 1;
              End;
            End;
          7 :
            Begin
              sPower := '万';
              If copy(buf, i, 1) = '0' Then
              Begin
                sStr := sStr + sPower+'零';
                iPosition := iPosition + 2;
                iTmp := 1;
              End;
            End;
          11 :
            Begin
              sPower := '元';
              If (copy(buf, i, 1) = '0') And (iPosition <> 0) Then
              Begin
                sStr := sStr + sPower;
                iPosition := iPosition + 2;
                iTmp := 1;
              End;
            End;
          12 :
            Begin
              flag0 := False;
              If (copy(buf, i + 1, 1) = '0') And (copy(buf, i + 2, 1) = '0') Then
              Begin
                sPower := '整';
                sStr := sStr + sPower;
                iPosition := iPosition + 2;
                iTmp := 2;
              End;
            End;
          13 : sPower := '角';
          14 :
            Begin
              If copy(buf, i, 1) = '0' Then iTmp := 2;
              sPower := '分';
            End;
        End;
        If (flag0 = True) And (iTmp = 0) Then
          Begin
            If i > 0 Then
              iPosition := iPosition + Sjoin(sStr, sPower, copy(buf, i, 1), copy(buf, i + 1, 1), iPosition)
            Else
              iPosition := iPosition + Sjoin(sStr, sPower, copy(buf, i, 1), copy(buf, i, 1), iPosition);
          End;
        If iTmp = 2 Then
          break
        Else
          i := i + 1;
      End;
    //  If (ilength <> 0) Then ilength := iPosition;
      If pos('整', sStr) < 1 then
      begin
       if (pos('角', sStr) < 1) and (pos('分', sStr) < 1) Then
         sStr := sStr + '整';
      end;
        sStr :=stringreplace(sStr,'零零','零',[rfReplaceAll]);
        sStr :=stringreplace(sStr,'零元','元',[rfReplaceAll]);
        Result := Trim(sStr);
    End; 
    正确填写票据和结算凭证的基本规定    银行、单位和个人填写的各种票据和结算凭证是办理支付结算和现金收付的重要依据,
    直接关系到支付结算的准确、及时和安全。票据和结算凭证是银行、单位和个人凭以记载账
    务的会计凭证,是记载经济业务和明确经济责任的一种书面证明。因此,填写票据和结算凭
    证,必须做到标准化、规范化,要要素齐全、数字正确、字迹清晰、不错漏、不潦草,防止
    涂改。
        一、中文大写金额数字应用正楷或行书填写,如壹(壹)、贰(贰)、叁、肆(肆)、
    伍(伍)、陆(陆)、柒、捌、玖、拾、佰、仟、万(万)、亿、元、角、分、零、整(
    正)等字样。不得用一、二(两)、三、四、五、六、七、八、九、十、念、毛、另(或0)
    填写,不得自造简化字。如果金额数字书写中使用繁体字,如貳、陸、億、萬、圓的,也
    应受理。
        二、中文大写金额数字到“元”为止的,在“元”之后,应写“整”(或“正”)字,
    在“角”之后可以不写“整”(或“正”)字。大写金额数字有“分”的,“分”后面不
    写“整”(或“正”)字。
        三、中文大写金额数字前应标明“人民币”字样,大写金额数字应紧接“人民币”字
    样填写,不得留有空白。大写金额数字前未印“人民币”字样的,应加填“人民币”三字。
    在票据和结算凭证大写金额栏内不得预印固定的“仟、佰、拾、万、仟、伯、拾、元、角、
    分”字样。
        四、阿拉伯小写金额数字中有“0”时,中文大写应按照汉语语言规律、金额数字构
    成和防止涂改的要求进行书写。举例如下:
        (一)阿拉伯数字中间有“O”时,中文大写金额要写“零”字。如¥1,409.50,
    应写成人民币壹仟肆佰零玖元伍角。
        (二)阿拉伯数字中间连续有几个“0”时,中文大写金额中间可以只写一个“零”
    字。如¥6,007.14,应写成人民币陆仟零柒元壹角肆分。
        (三)阿拉伯金额数字万位或元位是“0”,或者数字中间连续有几个“0”,万位、
    元位也是“0’,但千位、角位不是“0”时,中文大写金额中可以只写一个零字,也可
    以不写“零”字。如¥1,680.32,应写成人民币壹仟陆佰捌拾元零叁角贰分,或者写
    成人民币壹仟陆佰捌拾元叁角贰分;又如¥107,000.53,应写成人民币壹拾万柒仟元
    零伍角叁分,或者写成人民币壹拾万零柒仟元伍角叁分。
        (四)阿拉伯金额数字角位是“0”,而分位不是“0”时,中文大写金额“元”后
    面应写“零”字。如¥16,409.02,应写成人民币壹万陆仟肆佰零玖元零贰分;又如
    ¥325.04,应写成人民币叁佰贰拾伍元零肆分。
        五、阿拉伯小写金额数字前面,均应填写入民币符号“¥”(或草写。阿拉伯
    小写金额数字要认真填写,不得连写分辨不清。
        六、票据的出票日期必须使用中文大写。为防止变造票据的出禀日期,在填写月、
    日时,月为壹、贰和壹拾的,日为壹至玖和壹拾、贰拾和叁抬的,应在其前加“零”;
    日为抬壹至拾玖的,应在其前加“壹”。如1月15日,应写成零壹月壹拾伍日。再如
    10月20日,应写成零壹拾月零贰拾日。
        七、票据出票日期使用小写填写的,银行不予受理。大写日期未按要求规范填写的,
    银行可予受理,但由此造成损失的,由出票入自行承担。