⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 skypublic.pas

📁 delphi常使用函数,你了解她的常识用函数吗? 请在这里查看你需要的函数类,提供的比较全面
💻 PAS
📖 第 1 页 / 共 4 页
字号:
  for i:=1 to Blanks do
  begin
    Delete(AgainstStr,5*i-j,1);
    Inc(j);
  end;
  Result:=ReverseStr(AgainstStr);
end;

function FloatToChnStr(Value: Real; ClearZero: Boolean; full:Boolean=False): String;
const
  ChnUnit: array[0..13] of string = ('分', '角', '元', '拾', '佰', '仟', '万', '拾', '佰', '仟', '亿', '拾', '佰', '仟');
  ChnNum : array[0..9]  of string = ('零', '壹','贰', '叁', '肆', '伍', '陆', '柒', '捌', '玖');
var
  I: Integer;
  StrValue, StrNum: String;
  ValueLen: Integer;
begin
  if Value <= 0 then
  begin
    Result := '输入参数应大于零。';
    Exit;
  end;
  value:=RoundTo(Value,-2);
  StrValue := IntToStr(Round(Value * 100));
  ValueLen := Length(StrValue);
  Result := '';
  for I := 1 to ValueLen do
  begin
    StrNum := StrValue[I];
    Result := Result + ChnNum[StrToInt(StrNum)] + ChnUnit[ValueLen - I];
  end;
  if ClearZero then
  begin
    Result := StringReplace(Result, '零分', '',   [rfReplaceAll]);
    if Frac(Value)>0.009999 then
      Result := StringReplace(Result, '零角', '零',   [rfReplaceAll])
    else
      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;
  if full then
  begin
    if Frac(Value)<0.009999 then
      Result:=Result+'整';
  end;
end;

{将数字变成英文}
function FloatToEnglish(Num:Double):string;
var
  StrList:TStringList;
  i:Integer;
  StrTemp1,StrTemp2:String;
  NumArray:array [0..3] of Integer;
  NumCount:Integer;
  ResultStr:string;
  Tmp,Tmp1,Tmp2,TmpXiao:Integer;

  function OneNumToEng(Num:Integer;TWO:Integer=0):string;
  begin
    if Two=0 then
    begin
      case Num of
        0:Result:='ZERO';
        1:Result:='ONE';
        2:Result:='TWO';
        3:Result:='THREE';
        4:Result:='FOUR';
        5:Result:='FIVE';
        6:Result:='SIX';
        7:Result:='SEVEN';
        8:Result:='EIGHT';
        9:Result:='NINE';
      end;
    end
    else if Two=1 then
    begin
      case Num of
        1:Result:='TEN';
        2:Result:='TWENTY';
        3:Result:='THIRTY';
        4:Result:='FORTY';
        5:Result:='FIFTY';
        6:Result:='SIXTY';
        7:Result:='SEVENTY';
        8:Result:='EIGHTY';
        9:Result:='NINETY';
      end;
    end
    else if Two=2 then
    begin
      case Num of
        0:Result:='';
        1:Result:='ONE';
        2:Result:='TWO';
        3:Result:='THREE';
        4:Result:='FOUR';
        5:Result:='FIVE';
        6:Result:='SIX';
        7:Result:='SEVEN';
        8:Result:='EIGHT';
        9:Result:='NINE';
      end;
    end;
  end;

  function TwoNumToEng(Num:Integer):string;
  var
    NStr:string;
    One:string;
    Two:string;
    S:string;
  begin
    NStr:=IntToStr(Num);
    if Num<10 then
      Result:=OneNumToEng(Num)
    else begin
      case Num of
        10:Result:='TEN';
        11:Result:='ELEVEN';
        12:Result:='TWELVE';
        13:Result:='THIRTEEN';
        14:Result:='FOURTEEN';
        15:Result:='FIFTEEN';
        16:Result:='SIXTEEN';
        17:Result:='SEVENTEEN';
        18:Result:='EIGHTEEN';
        19:Result:='NINETEEN';
        20:Result:='TWENTY';
        30:Result:='THIRTY';
        40:Result:='FORTY';
        50:Result:='FIFTY';
        60:Result:='SIXTY';
        70:Result:='SEVENTY';
        80:Result:='EIGHTY';
        90:Result:='NINETY';
        else begin
          One:=NStr[1];
          Two:=NStr[2];
          S:=OneNumToEng(StrToInt(One),1);
          S:=S+'-'+OneNumToEng(StrToInt(Two),2);
          Result:=S;
        end;
      end;
    end;
  end;

  function ThreeNumToEng(Num:Integer;Hasand:Boolean=False):string;
  var
    Nstr:string;
    S:string;
    H:Integer;
    R:Integer;
  begin
    Nstr:=IntToStr(Num);
    if Num>=100 then
    begin
      H:=Num div 100;
      R:=Num mod 100;
      if R=0 then
      begin
        S:=OneNumToEng(H)+' '+'HUNDRED';
      end
      else begin
        S:=OneNumToEng(H)+' '+'HUNDRED'+' AND '+TwoNumToEng(R);
      end;
    end
    else begin
      S:=TwoNumToEng(Num);
    end;
    if Hasand then
    begin
      if S='ZERO' then
       Result:='' else
      Result:='AND '+S
    end
    else Result:=S;
  end;

begin

{0               nought;zero;O
1               one
2               two
3               three
4               four
5               five
6               six
7               seven
8               eight
9               nine
10              ten
11              eleven
12              twelve
13              thirteen
14              fourteen
15              fifteen
16              sixteen
17              seventeen
18              eighteen
19              nineteen
20              twenty
21              twenty-one
22              twenty-two
23              twenty-three
30              thirty
32              thirty-two
40              forty
50              fifty
60              sixty
70              seventy
80              eighty
90              ninety
100             one hundred
101             one hundred and one
156             one hundred and fifty-six
192             one hundred and ninety-two
200             two hundred
300             three hundred
400             four hundred
500             five hundred
600             six hundred
700             seven hundred
800             eight hundred
900             nine hundred
1,000           one thousand
1,001           one thousand and one
1,300           thirteen hundred;one thousand and three hundred
2,000           two thousand
2,034           two thousand and thirty-four
6,502           six thousand five hundred and two
38,000          thirty-eight thousand
45,672          forty-five thousand six hundred and seventy-two
500,000         five hundred thousand
1,000,000       one million
3,123,400       three million,one hundred and twenty-three thousand and four hundred
8,000,000       eight million
47,000,000      forty-seven million
900,000,000     nine hundred million
1,000,000,000   a milliard,one milliard(美作:a billion,one billion)
1,050,000,000   one billion and fifty million
10,000,000,000  ten billion
200,000,000,000 two hundred billion
1,000,000,000,000       a billion,one billion(美作:a trillion,one trillion)
6,000,000,000,000       six million million}
  if Num>2000000000 then Raise Exception.Create('数值太大');
  StrList:=TStringList.Create;
  try
    Tmp:=Trunc(Num);
    TmpXiao:=Round((Num-Tmp)*100);
//    ShowMessage(IntToStr(Tmpxiao));
    Tmp1:=Tmp div 1000;
    Tmp2:=Tmp mod 1000;
    while Tmp1>0 do
    begin
      Tmp:=Tmp1;
      StrList.Add(IntToStr(Tmp2));
      Tmp1:=Tmp div 1000;
      Tmp2:=Tmp mod 1000;
    end;
    StrList.Add(IntToStr(Tmp2));
    NumCount:=StrList.Count;
    for i:=0 to NumCount-1 do
    begin
      NumArray[i]:=StrToInt(StrList[i]);
    end;
    case NumCount of
      1:ResultStr:=ThreeNumToEng(NumArray[0]);
      2:ResultStr:=ThreeNumToEng(NumArray[1])+' THOUSAND '+ThreeNumToEng(NumArray[0],True);
      3:begin
        StrTemp1:=ThreeNumToEng(NumArray[1],True);
        if StrTemp1<>'' then
          ResultStr:=ThreeNumToEng(NumArray[2])+' MILLION '+
            StrTemp1+' THOUSAND '+
            ThreeNumToEng(NumArray[0],True)
        else ResultStr:=ThreeNumToEng(NumArray[2])+' MILLION '+
            ThreeNumToEng(NumArray[0],True);
      end;
      4:begin
        StrTemp2:=ThreeNumToEng(NumArray[3])+' BILLION ';
        StrTemp1:=ThreeNumToEng(NumArray[2],True);
        if StrTemp1<>'' then
          StrTemp2:=StrTemp2+StrTemp1;
        StrTemp1:=ThreeNumToEng(NumArray[1],True);
        if StrTemp1<>'' then
          StrTemp2:=StrTemp2+StrTemp1;
        ResultStr:=StrTemp2+ThreeNumToEng(NumArray[0],True);
      end;
    end;
    StrTemp1:=ThreeNumToEng(TmpXiao,True);
    if StrTemp1<>'' then
      ResultStr:=ResultStr+' AND CENTS '+Copy(StrTemp1,5,Length(StrTemp1)-4);
    Result:=ResultStr;
  finally
    StrList.Free;
  end;
end;

{日期用英文}
function DateToEng(ADate:TDate;th:Boolean=False):string;
var
  AYear,AMonth,ADay:Word;
  SYear,SMonth,SDay:string;
begin
  DecodeDate(ADate,AYear,AMonth,ADay);
  case AMonth of
    1:SMonth:='JAN';
    2:SMonth:='FEB';
    3:SMonth:='MAR';
    4:SMonth:='APR';
    5:SMonth:='MAY';
    6:SMonth:='JUN';
    7:SMonth:='JUL';
    8:SMonth:='AUG';
    9:SMonth:='SEP';
    10:SMonth:='OCT';
    11:SMonth:='NOV';
    12:SMonth:='DEC';
  end;
  SDay:=IntToStr(ADay);
  if th then
  begin
    case ADay of
      1,21,31:SDay:=SDay+'st';
      2,22,23:SDay:=SDay+'nd';
      3:SDay:=SDay+'rd';
      4..20:SDay:=SDay+'th';
      24..30:SDay:=SDay+'st';
    end;
  end;
  SYear:=IntToStr(AYear);
  Result:=SMonth+' '+SDay+','+SYear;
end;

{字符串取反}
{function GetAgainstStr(Str:string):string;
var
  i,StrLength:Integer;
  TmpStr:string;
begin
  StrLength:=Length(Str);
  SetLength(TmpStr,StrLength);
  for i:=1 to StrLength do TmpStr[i]:=Str[StrLength+1-i];
  Result:=TmpStr;
end;}

{取得SQL日期字符串}
function DateToSQLDateStr(ADate:TDateTime):string;
begin
  Result:=FormatDateTime('mm"/"dd"/"yyyy',ADate);
end;

function StrToSQLDateStr(Str:string):string;
var
  StrDate:TDateTime;
begin
  StrDate:=StrToDateTime(Str);
  Result:=DateToSQLDateStr(StrDate);
end;

function TimeToSQLTimeStr(ATime:TDateTime):string;
begin
  Result:=FormatDateTime('hh":"nn":"ss',ATime);
end;

function StrToSQLTimeStr(Str:string):string;
var
  StrTime:TDateTime;
begin
  StrTime:=StrToDateTime(Str);
  Result:=TimeToSQLTimeStr(StrTime);
end;

function DateTimeToSQLDateTimeStr(ADateTime:TDateTime):string;
begin
  Result:=FormatDateTime('mm"/"dd"/"yyyy hh":"nn":"ss',ADateTime);
end;

function StrToSQLDateTimeStr(Str:string):string;
var
  StrDateTime:TDateTime;
begin
  StrDateTime:=StrToDateTime(Str);
  Result:=DateTimeToSQLDateTimeStr(StrDateTime);
end;

{返回有逗号的金额字符串}
function FloatToMoneyStr(Num:Double;const HasSymbol:Boolean=False):string;
begin
  if HasSymbol then Result:=CurrToStrF(Num,ffCurrency,2)
  else Result:=CurrToStrF(Num,ffNumber,2);
end;

{Bool与字符串的转换}
function StrToBool(const Str:string):Boolean;
begin
  if CompareText('True',Str)=0 then Result:=True
  else Result:=False;
end;

function BoolToStr(const Bool:Boolean):string;
begin
  if Bool then Result:='True'
  else Result:='False';
end;

{判断是否日期等}
type
  TDateOrder = (doMDY, doDMY, doYMD);

function CurrentYear: Word;
var
  SystemTime: TSystemTime;
begin
  GetLocalTime(SystemTime);
  Result := SystemTime.wYear;
end;

function DoEncodeTime(Hour, Min, Sec, MSec: Word; var Time: TDateTime): Boolean;
begin
  Result := False;
  if (Hour < 24) and (Min < 60) and (Sec < 60) and (MSec < 1000) then
  begin
    Time := (Hour * 3600000 + Min * 60000 + Sec * 1000 + MSec) / MSecsPerDay;
    Result := True;
  end;
end;

function DoEncodeDate(Year, Month, Day: Word; var Date: TDateTime): Boolean;
var
  I: Integer;
  DayTable: PDayTable;
begin
  Result := False;
  DayTable := @MonthDays[IsLeapYear(Year)];
  if (Year >= 1) and (Year <= 9999) and (Month >= 1) and (Month <= 12) and
    (Day >= 1) and (Day <= DayTable^[Month]) then
  begin
    for I := 1 to Month - 1 do Inc(Day, DayTable^[I]);
    I := Year - 1;
    Date := I * 365 + I div 4 - I div 100 + I div 400 + Day - DateDelta;
    Result := True;
  end;
end;

procedure ScanBlanks(const S: string; var Pos: Integer);
var
  I: Integer;
begin
  I := Pos;
  while (I <= Length(S)) and (S[I] = ' ') do Inc(I);
  Pos := I;
end;

function ScanNumber(const S: string; var Pos: Integer;
  var Number: Word; var CharCount: Byte): Boolean;
var
  I: Integer;
  N: Word;
begin
  Result := False;
  CharCount := 0;
  ScanBlanks(S, Pos);
  I := Pos;
  N := 0;
  while (I <= Length(S)) and (S[I] in ['0'..'9']) and (N < 1000) do
  begin
    N := N * 10 + (Ord(S[I]) - Ord('0'));
    Inc(I);
  end;
  if I > Pos then
  begin
    CharCount := I - Pos;
    Pos := I;
    Number := N;
    Result := True;
  end;
end;

function ScanString(const S: string; var Pos: Integer;
  const Symbol: string): Boolean;
begin
  Result := False;
  if Symbol <> '' then
  begin
    ScanBlanks(S, Pos);
    if AnsiCompareText(Symbol, Copy(S, Pos, Length(Symbol))) = 0 then
    begin
      Inc(Pos, Length(Symbol));
      Result := True;
    end;
  end;
end;

function ScanChar(const S: string; var Pos: Integer; Ch: Char): Boolean;
begin
  Result := False;
  ScanBlanks(S, Pos);
  if (Pos <= Length(S)) and (S[Pos] = Ch) then
  begin
    Inc(Pos);
    Result := True;
  end;
end;

function GetDateOrder(const DateFormat: string): TDateOrder;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -