分享

delphi:金额转成英文

 quasiceo 2012-12-24

delphi:金额转成英文

Night 发表于 2005-09-03 01:01:53

金额转成英文

unit XuStrUtils;

interface
Uses SysUtils, StrUtils;

Function IntToEnStr(Value: Integer): String;                        // Convert Integer to English
Function FloatToEnStr(Value: Extended; digit: Integer=2): String;   // Convert float to English
Function FTFormatDate(DateTime: TDateTime): String;                 //Convert Date to [EnglishMonthName dd, yyyy]

implementation
Uses Math, XuFuncLib;

Const
//  Ones: Array[0..9] of String=(' ZERO',' ONE',' TWO',' THREE',' FOUR',' FIVE',' SIX',' SEVEN',' EIGHT',' NINE');
//  Teens : Array [0..9] of String = (' TEN',' ELEVEN', ' TWELVE',' THIRTEEN',' FOURTEEN',' FIFTEEN',' SIXTEEN',' SEVENTEEN',' EIGHTEEN',' NINETEEN');
 OneToTeens: Array[0..19] of String=(' ZERO',' ONE',' TWO',' THREE',' FOUR',' FIVE',' SIX',' SEVEN',' EIGHT',' NINE',
                                     ' TEN',' ELEVEN',' TWELVE',' THIRTEEN',' FOURTEEN',' FIFTEEN',' SIXTEEN',' SEVENTEEN',' EIGHTEEN',' NINETEEN');
 Tens: Array[0..9] of String =(' ZERO',' TEN',' TWENTY',' THIRTY',' FORTY',' FIFTY',' SIXTY',' SEVENTY',' EIGHTY',' NINETY');
 Thousands:Array[1..4] of String = (' ', ' THOUSAND',' MILLION',' BILLION');

 DotName = ' DOT';
 HUNDREDName =' HUNDRED';
 MaxDigit = 12;

Type
 Str3 = String[3];


Function HunderdToEnStr(ns: Str3): String;   //Call by IntToEnStr
Var
 i: integer;
 tmpStr: String;
begin
 Result:='';
 for i:=1 to 3 do
 begin
   case i of
     1: case ns[1] of
          '1'..'9': tmpStr:= OneToTeens[StrToInt(ns)]+ HUNDREDName;
        else
          tmpStr:='';
        end;
     2: case ns[2] of
          '2'..'9': tmpStr:= Tens[StrToInt(ns)];
          '1': tmpStr:=OneToTeens[StrToInt(ns[2]+ns[3])];
        else
          tmpStr:='';
        end;
     3: case ns[2] of
          ' ','0', '2'..'9': if ns<>'0' then
                           tmpStr:= OneToTeens[StrToInt(ns)]
                         else
                            tmpStr:='';
        else
          tmpStr:='';
        end;
   end;
   Result:=Result+TmpStr;
 end;
end;

Function IntToEnStr(Value: Integer): String;
Var
 i: Integer;
 cycCount: Integer;
 SVal: String;
 TmpStr: String;
 SubStr: Str3;
begin
 SVal:=IntToStr(Value);
 Result:='';
 if Length(SVal)>MaxDigit then
    Raise Exception.CreateFmt('Out of Rang.'#13'Integer digit > %d', [MaxDigit]);
 if Length(SVal)>3 then
   CycCount:=(Length(SVal) DIV 3)+IIF((Length(SVal) MOD 3)>0)
 else
   CycCount:=1;
 for i:=1 to CycCount do
 begin
   SubStr:=StringOfChar(' ',3-Length(RightStr(SVal,3)))+RightStr(SVal,3);
   TmpStr:=HunderdToEnStr(SubStr);
   if TmpStr<>'' then
     Result:=TmpStr+Thousands+Result;
   if Length(SVal)>=3 then
     Delete(SVal,Length(SVal)-3+1, 3);
 end;
 Result:=Trim(Result);
end;

Function FloatToEnStr(Value: Extended; digit: Integer=2): String;
Var
 IntStr: String;
 SubStr: String;
 i: Integer;
begin
 IntStr:=IntToEnStr(Trunc(Value));
 if Digit<=0 then
 begin
   Result:= IntStr;
   Exit;
 end
 else
   Result:=DotName;
 SubStr:=IntToStr(Round((Value- Trunc(Value))*Power(10,digit)));
 SubStr:=StringofChar('0',Digit-Length(SubStr))+SubStr;
 for i:=1 to digit do
   Result:=Result+ OneToTeens[StrToInt((SubStr))];
 Result:=Trim(IntStr+Result);
end;

Var
 WTFormatSettings: TFormatSettings;

Function FTFormatDate(DateTime: TDateTime): String;
begin
 GetLocaleFormatSettings(09, WTFormatSettings);
 Result:=FormatDateTime('mmmm dd, yyyy',DateTime, WTFormatSettings);
end;

end.

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多