📄 skypublic.pas
字号:
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 + -