delphi 金额大小写转换函数  
官方Delphi 学习QQ群: 682628230(三千人)\n
频道

delphi 金额大小写转换函数


{*------------------------------------------------
  金额大小写转换函数
  @author  王云盼
  @version V1506.01
 在delphi7测试OK
-------------------------------------------------}
unit UnTranRMB; //主要是考虑数字的小数部分,和大写金额的零
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
 
function TranRMB(const Value: string): string;     /// const 和 var 常量 变量 数字金额转换成大写金额
function TranNum(M: string):string;                /// 大写金额转换成数字金额 
 
implementation
 
{*------------------------------------------------
  判断是否有小数点, 切给出小数点出现的位置 和小数点的数目
  @param  S 字符串
  @param  Pos 小数点位置
  @param  Number 小数点个数
  @return Boolean
-------------------------------------------------}
function  IsPoint(S: string; var Pos: Integer; var Number: integer): Boolean;
var
  I: integer;
begin
  Result := False;
  Number := 0;
  for I := 1 to length(S)  do
  begin
    if S[I] = '.' then
    begin
      Pos := I;
      Number := Number + 1;
      Result := True;
    end;
  end;
end;
 
{*------------------------------------------------
  检测字符串是否合理,若小数点超过1个或者字符串开头是0
  @param  Value
  @return Boolean
-------------------------------------------------}
function ChickStr(Value: double): Boolean;
var
  J, K : Integer;
begin
  Result := False;
  if Value <= 0 then
    Result := True;
  if IsPoint(floatToStr(Value), J, K) = True then
    if K >= 2  then
      Result := True;
end;
 
{*------------------------------------------------
  转换小写函数
  @param
  @return
-------------------------------------------------}
function TranNum(M: string):string;
var
  N: Integer;
  S: string;
begin
  S := '.00';
  if Length(M) = 1 then
    Result := '¥' + M + S
  else Result := '¥' + M ;
end;
 
{*------------------------------------------------
  数字金额转换成大写金额
  @param
  @return
-------------------------------------------------}
function TranRMB(const Value: string): string;
var
  I, J, K, L, V,  Pos, LZPart, LXPart : integer;
  S1: string;
  IsZero: Boolean;
begin
  if  ((Value[1]='0') and (Value[2]<>'.')) or (Value[1]='.') then  /// 第一位不能为小数点
  begin
    ShowMessage('不符合要求');
    exit;
  end;
  //if  ChickStr(FloatToStr(S1)) = True then exit;  /// 判断是否可以转换
  L := length(Value);                 /// 初始化转换的数字长度
  Result := '人民币';              /// 初始化返回值
 
  /// 有小数情况
  if IsPoint(Value, Pos, J) = True then
  begin
    LXPart := L - Pos;               /// 小数部分长度
    LZPart := L - LXPart - 1;        /// 整数部分长度
    if StrToFloat(Value) = 0 then
    begin
      Result :=Result + '零元整';
      exit;
    end;
    for J := 1 to LZPart do          /// 当前位置
    begin
      K := StrToInt(Value[J]);       /// 当前位置的内容
      V := LZPart - J + 1;           /// 当前位置的权
      case K of                      /// 获取当前位置内容的大写值
        1: S1 := '壹';
        2: S1 := '贰';
        3: S1 := '叁';
        4: S1 := '肆';
        5: S1 := '伍';
        6: S1 := '陆';
        7: S1 := '柒';
        8: S1 := '捌';
        9: S1 := '玖';
        0: begin                          /// 有0的情况
            S1 := '零';
            if J < LZPart then            /// 如果不是最后一位,则判断低位是否也有0,有0不显示
            begin
              if (Value[J+1] = '') or (Value[J+1] = '0') then
              S1 := '';
            end;
            if J = LZPart then            /// 0在最后一位也不显示
              S1 := '';
           end;
        end;
      case V of                           /// 权的情况
        1:begin
            if K = 0 then
            begin
              if StrToFloat(Value) < 1 then
              begin
                S1 := '';
                Result := Result + S1;
              end
              else begin
              S1 := '';
              Result := Result + S1  + '元' ;
              end;
             end
          else
            Result := Result + S1 + '元';
          end;
        2:begin
          if K = 0 then
            Result := Result + S1
          else
            Result := Result + S1 + '拾';
          end;
        3:begin
          if K = 0 then
             Result := Result + S1
          else
            Result := Result + S1 + '百' ;
          end;
        4:begin
          if K = 0 then
            Result := Result + S1
          else
            Result := Result + S1 + '仟' ;
          end;
        5:begin
          if K = 0 then
            begin
               S1 := '';
               Result := Result + S1  + '万' ;
             end
          else
            Result := Result + S1 + '万';
          end;
        6:begin
          if K = 0 then
            Result := Result + S1
          else
            Result := Result + S1 + '拾';
          end;
        7:begin
          if K = 0 then
            Result := Result + S1
          else
            Result := Result + S1 + '百';
          end;
        8:begin
          if K = 0 then
            Result := Result + S1
          else
            Result := Result + S1 + '仟';
          end;
        9:begin
          if K = 0 then
            begin
               S1 := '';
               Result := Result + S1  + '万' ;
             end
          else
            Result := Result + S1 + '亿';
          end;
        10:begin
          if K = 0 then
            Result := Result + S1
          else
            Result := Result + S1 + '拾';
          end;
        11:begin
          if K = 0 then
            Result := Result + S1
          else
            Result := Result + S1 + '百';
          end;
        12:begin
          if K = 0 then
            Result := Result + S1
          else
            Result := Result + S1 + '仟';
          end;
        13:begin
          if K = 0 then
            Result := Result + S1
          else
            Result := Result + S1 + '万';
          end;
        14:begin
          if K = 0 then
            Result := Result + S1
          else
            Result := Result + S1 + '兆';
          end;
      end;
    end;
     for I := 1 to LXPart do
     begin
        V := StrToInt(Value[I+Pos]) ;
        case V of
          1: S1 := '壹';
          2: S1 := '贰';
          3: S1 := '叁';
          4: S1 := '肆';
          5: S1 := '伍';
          6: S1 := '陆';
          7: S1 := '柒';
          8: S1 := '捌';
          9: S1 := '玖';
          0: begin
              S1 := '零';
              if I < L then   /// 如果不是最后一位
              begin
               if (Value[I+Pos+1] = '') or (Value[I+Pos+1] = '0') then
               begin
                 IsZero := True;
                 S1 := '';
               end;
              end;
              if I = L then
                S1 := '';
              end;
       end;
 
      case I of
        1: begin
             if V = 0 then
             begin
               Result := Result + S1  ;
             end
             else
               Result := Result + S1 + '角';
           end;
        2: begin
             if V = 0 then
             begin
               Result := Result + S1 ;
             end
             else
              Result := Result + S1 + '分';
             end;
        3: begin
            if V = 0 then
               begin
               Result := Result + S1 ;
             end
             else
              Result := Result + S1 + '厘';
             end;
        4: begin
             if V = 0 then
               begin
               Result := Result + S1 ;
             end
             else
               Result := Result + S1 + '毫';
             end;
      end;
     end;
     if S1 = ''  then Result := Result + '整';
  end
 
  /// 不是小数情况
  else begin
    for I := 1 to L do                  /// 当前位的位置
    begin
      V := StrToInt(Value[I]) ;    /// 当前位的内容
      K := L - I + 1;                   /// 当前位的权
      case V of
        1: S1 := '壹';
        2: S1 := '贰';
        3: S1 := '叁';
        4: S1 := '肆';
        5: S1 := '伍';
        6: S1 := '陆';
        7: S1 := '柒';
        8: S1 := '捌';
        9: S1 := '玖';
        0: begin
             S1 := '零';
             if I < L then   /// 如果不是最后一位
             begin           /// 判断下一位是不是0,低位0不显示
               if (Value[i+1] = '') or (Value[i+1] = '0') then
                 S1 := '';
             end;
             if I = L then
               S1 := '';
           end;
      end;
 
      case K of
         1:begin
            if V = 0 then          /// 当有零的情况
            Result := Result + S1 + '元整'
          else
            Result := Result + S1 + '元整';
          end;
        2:begin
          if V = 0 then
            Result := Result + S1
          else
            Result := Result + S1 + '拾';
          end;
        3:begin
          if V = 0 then
             Result := Result + S1
          else
            Result := Result + S1 + '百' ;
          end;
        4:begin
          if V = 0 then
             Result := Result + S1
          else
            Result := Result + S1 + '仟' ;
          end;
        5:begin
          if V = 0 then
             begin
               S1 := '';
               Result := Result + S1  + '万' ;
             end
          else
            Result := Result + S1 + '万';
          end;
        6:begin
          if V = 0 then
             Result := Result + S1
          else
            Result := Result + S1 + '拾';
          end;
        7:begin
          if V = 0 then
             Result := Result + S1
          else
            Result := Result + S1 + '百';
          end;
        8:begin
          if V = 0 then
             Result := Result + S1
          else
            Result := Result + S1 + '仟';
          end;
        9:begin
          if V = 0 then
             begin
               S1 := '';
               Result := Result + S1  + '亿' ;
             end
          else
            Result := Result + S1 + '亿';
          end;
        10:begin
           if V = 0 then
             Result := Result + S1
           else
             Result := Result + S1 + '拾';
           end;
        11:begin
           if V = 0 then
             Result := Result + S1
           else
             Result := Result + S1 + '百';
           end;
        12:begin
           if V = 0 then
             Result := Result + S1
           else
             Result := Result + S1 + '仟';
           end;
        13:begin
           if V = 0 then
             Result := Result + S1
           else
             Result := Result + S1 + '万';
           end;
        14:begin
           if V = 0 then
             Result := Result + S1
           else
             Result := Result + S1 + '兆';
           end;
      end;
    end;
  end;
end;
 
end.

推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.072875022888184 seconds