Function RealToTxt(Amount : Real) : String; var Num : LongInt; Fracture : Integer; function Num2Str(Num: LongInt): String; Const hundred = 100; thousand = 1000; million = 1000000; billion = 1000000000; begin if Num >= billion then if (Num mod billion) = 0 then Num2Str := Num2Str(Num div billion) + ' Billion' else Num2Str := Num2Str(Num div billion) + ' Billion ' + Num2Str(Num mod billion) else if Num >= million then if (Num mod million) = 0 then Num2Str := Num2Str(Num div million) + ' Million' else Num2Str := Num2Str(Num div million) + ' Million ' + Num2Str(Num mod million) else if Num >= thousand then if (Num mod thousand) = 0 then Num2Str := Num2Str(Num div thousand) + ' Thousand' else Num2Str := Num2Str(Num div thousand) + ' Thousand ' + Num2Str(Num mod thousand) else if Num >= hundred then if (Num mod hundred) = 0 then Num2Str := Num2Str(Num div hundred) + ' Hundred' else Num2Str := Num2Str(Num div hundred) + ' Hundred ' + Num2Str(Num mod hundred) else case (Num div 10) of 6,7,9: if (Num mod 10) = 0 then Num2Str := Num2Str(Num div 10) + 'ty' else Num2Str := Num2Str(Num div 10) + 'ty-' + Num2Str(Num mod 10); 8: if Num = 80 then Num2Str := 'Eighty' else Num2Str := 'Eighty-' + Num2Str(Num mod 10); 5: if Num = 50 then Num2Str := 'Fifty' else Num2Str := 'Fifty-' + Num2Str(Num mod 10); 4: if Num = 40 then Num2Str := 'Forty' else Num2Str := 'Forty-' + Num2Str(Num mod 10); 3: if Num = 30 then Num2Str := 'Thirty' else Num2Str := 'Thirty-' + Num2Str(Num mod 10); 2: if Num = 20 then Num2Str := 'Twenty' else Num2Str := 'Twenty-' + Num2Str(Num mod 10); 0,1: case Num of 0: Num2Str := 'Zero'; 1: Num2Str := 'One'; 2: Num2Str := 'Two'; 3: Num2Str := 'Three'; 4: Num2Str := 'Four'; 5: Num2Str := 'Five'; 6: Num2Str := 'Six'; 7: Num2Str := 'Seven'; 8: Num2Str := 'Eight'; 9: Num2Str := 'Nine'; 10: Num2Str := 'Ten'; 11: Num2Str := 'Eleven'; 12: Num2Str := 'Twelve'; 13: Num2Str := 'Thirteen'; 14: Num2Str := 'Fourteen'; 15: Num2Str := 'Fifteen'; 16: Num2Str := 'Sixteen'; 17: Num2Str := 'Seventeen'; 18: Num2Str := 'Eightteen'; 19: Num2Str := 'Nineteen' end end end {Num2Str};begin Num:= Trunc(Amount); Fracture:= Round(1000*Frac(Amount)); if Num > 0 then Result := Num2Str(Num) + ' and '; if Fracture > 0 then Result := Result + IntToStr(Fracture) + '/1000' else Result := Result + '000/1000'; end;
Function RealToTxt(Amount : Real) : String; var Num : LongInt; Fracture : Integer; function Num2Str(Num: LongInt): String; Const hundred = 100; thousand = 1000; million = 1000000; billion = 1000000000; begin if Num >= billion then if (Num mod billion) = 0 then Num2Str := Num2Str(Num div billion) + ' Billion' else Num2Str := Num2Str(Num div billion) + ' Billion ' + Num2Str(Num mod billion) else if Num >= million then if (Num mod million) = 0 then Num2Str := Num2Str(Num div million) + ' Million' else Num2Str := Num2Str(Num div million) + ' Million ' + Num2Str(Num mod million) else if Num >= thousand then if (Num mod thousand) = 0 then Num2Str := Num2Str(Num div thousand) + ' Thousand' else Num2Str := Num2Str(Num div thousand) + ' Thousand ' + Num2Str(Num mod thousand) else if Num >= hundred then if (Num mod hundred) = 0 then Num2Str := Num2Str(Num div hundred) + ' Hundred' else Num2Str := Num2Str(Num div hundred) + ' Hundred ' + Num2Str(Num mod hundred) else case (Num div 10) of 6,7,9: if (Num mod 10) = 0 then Num2Str := Num2Str(Num div 10) + 'ty' else Num2Str := Num2Str(Num div 10) + 'ty-' + Num2Str(Num mod 10); 8: if Num = 80 then Num2Str := 'Eighty' else Num2Str := 'Eighty-' + Num2Str(Num mod 10); 5: if Num = 50 then Num2Str := 'Fifty' else Num2Str := 'Fifty-' + Num2Str(Num mod 10); 4: if Num = 40 then Num2Str := 'Forty' else Num2Str := 'Forty-' + Num2Str(Num mod 10); 3: if Num = 30 then Num2Str := 'Thirty' else Num2Str := 'Thirty-' + Num2Str(Num mod 10); 2: if Num = 20 then Num2Str := 'Twenty' else Num2Str := 'Twenty-' + Num2Str(Num mod 10); 0,1: case Num of 0: Num2Str := 'Zero'; 1: Num2Str := 'One'; 2: Num2Str := 'Two'; 3: Num2Str := 'Three'; 4: Num2Str := 'Four'; 5: Num2Str := 'Five'; 6: Num2Str := 'Six'; 7: Num2Str := 'Seven'; 8: Num2Str := 'Eight'; 9: Num2Str := 'Nine'; 10: Num2Str := 'Ten'; 11: Num2Str := 'Eleven'; 12: Num2Str := 'Twelve'; 13: Num2Str := 'Thirteen'; 14: Num2Str := 'Fourteen'; 15: Num2Str := 'Fifteen'; 16: Num2Str := 'Sixteen'; 17: Num2Str := 'Seventeen'; 18: Num2Str := 'Eightteen'; 19: Num2Str := 'Nineteen' end end end {Num2Str}; function GetFracture(Amount : Real) : string; var I : integer; S : string; begin S := FloatToStr(Amount); I := Pos('.',S); Result := Copy(S,I+1,Length(S)-I); end; begin Num:= Trunc(Amount); Fracture:= Round(1000*Frac(Amount)); if Num > 0 then Result := Num2Str(num); if Fracture > 0 then Result := Result + ' point ' + GetFracture(Amount); end;又稍微修改了一下,我英文不好,小数点后面怎么表示不知道,楼主自己改改即可。
这不就是数字转换成金额是一样的事情吗??
循环对1000的n到1次方整除取余,
得到的每一组,再整除100得百位,余数整除10得十位余数为个位
用case判断,得到对应的英文
var
Num : LongInt;
Fracture : Integer; function Num2Str(Num: LongInt): String;
Const hundred = 100;
thousand = 1000;
million = 1000000;
billion = 1000000000;
begin
if Num >= billion then
if (Num mod billion) = 0 then
Num2Str := Num2Str(Num div billion) + ' Billion'
else
Num2Str := Num2Str(Num div billion) + ' Billion ' +
Num2Str(Num mod billion)
else
if Num >= million then
if (Num mod million) = 0 then
Num2Str := Num2Str(Num div million) + ' Million'
else
Num2Str := Num2Str(Num div million) + ' Million ' +
Num2Str(Num mod million)
else
if Num >= thousand then
if (Num mod thousand) = 0 then
Num2Str := Num2Str(Num div thousand) + ' Thousand'
else
Num2Str := Num2Str(Num div thousand) + ' Thousand ' +
Num2Str(Num mod thousand)
else
if Num >= hundred then
if (Num mod hundred) = 0 then
Num2Str := Num2Str(Num div hundred) + ' Hundred'
else
Num2Str := Num2Str(Num div hundred) + ' Hundred ' +
Num2Str(Num mod hundred)
else
case (Num div 10) of
6,7,9: if (Num mod 10) = 0 then
Num2Str := Num2Str(Num div 10) + 'ty'
else
Num2Str := Num2Str(Num div 10) + 'ty-' +
Num2Str(Num mod 10);
8: if Num = 80 then
Num2Str := 'Eighty'
else
Num2Str := 'Eighty-' + Num2Str(Num mod 10);
5: if Num = 50 then
Num2Str := 'Fifty'
else
Num2Str := 'Fifty-' + Num2Str(Num mod 10);
4: if Num = 40 then
Num2Str := 'Forty'
else
Num2Str := 'Forty-' + Num2Str(Num mod 10);
3: if Num = 30 then
Num2Str := 'Thirty'
else
Num2Str := 'Thirty-' + Num2Str(Num mod 10);
2: if Num = 20 then
Num2Str := 'Twenty'
else
Num2Str := 'Twenty-' + Num2Str(Num mod 10);
0,1: case Num of
0: Num2Str := 'Zero';
1: Num2Str := 'One';
2: Num2Str := 'Two';
3: Num2Str := 'Three';
4: Num2Str := 'Four';
5: Num2Str := 'Five';
6: Num2Str := 'Six';
7: Num2Str := 'Seven';
8: Num2Str := 'Eight';
9: Num2Str := 'Nine';
10: Num2Str := 'Ten';
11: Num2Str := 'Eleven';
12: Num2Str := 'Twelve';
13: Num2Str := 'Thirteen';
14: Num2Str := 'Fourteen';
15: Num2Str := 'Fifteen';
16: Num2Str := 'Sixteen';
17: Num2Str := 'Seventeen';
18: Num2Str := 'Eightteen';
19: Num2Str := 'Nineteen'
end
end
end {Num2Str};begin
Num:= Trunc(Amount);
Fracture:= Round(1000*Frac(Amount));
if Num > 0 then
Result := Num2Str(Num) + ' and ';
if Fracture > 0 then
Result := Result + IntToStr(Fracture) + '/1000'
else
Result := Result + '000/1000';
end;
var
Num : LongInt;
Fracture : Integer; function Num2Str(Num: LongInt): String;
Const hundred = 100;
thousand = 1000;
million = 1000000;
billion = 1000000000;
begin
if Num >= billion then
if (Num mod billion) = 0 then
Num2Str := Num2Str(Num div billion) + ' Billion'
else
Num2Str := Num2Str(Num div billion) + ' Billion ' +
Num2Str(Num mod billion)
else
if Num >= million then
if (Num mod million) = 0 then
Num2Str := Num2Str(Num div million) + ' Million'
else
Num2Str := Num2Str(Num div million) + ' Million ' +
Num2Str(Num mod million)
else
if Num >= thousand then
if (Num mod thousand) = 0 then
Num2Str := Num2Str(Num div thousand) + ' Thousand'
else
Num2Str := Num2Str(Num div thousand) + ' Thousand ' +
Num2Str(Num mod thousand)
else
if Num >= hundred then
if (Num mod hundred) = 0 then
Num2Str := Num2Str(Num div hundred) + ' Hundred'
else
Num2Str := Num2Str(Num div hundred) + ' Hundred ' +
Num2Str(Num mod hundred)
else
case (Num div 10) of
6,7,9: if (Num mod 10) = 0 then
Num2Str := Num2Str(Num div 10) + 'ty'
else
Num2Str := Num2Str(Num div 10) + 'ty-' +
Num2Str(Num mod 10);
8: if Num = 80 then
Num2Str := 'Eighty'
else
Num2Str := 'Eighty-' + Num2Str(Num mod 10);
5: if Num = 50 then
Num2Str := 'Fifty'
else
Num2Str := 'Fifty-' + Num2Str(Num mod 10);
4: if Num = 40 then
Num2Str := 'Forty'
else
Num2Str := 'Forty-' + Num2Str(Num mod 10);
3: if Num = 30 then
Num2Str := 'Thirty'
else
Num2Str := 'Thirty-' + Num2Str(Num mod 10);
2: if Num = 20 then
Num2Str := 'Twenty'
else
Num2Str := 'Twenty-' + Num2Str(Num mod 10);
0,1: case Num of
0: Num2Str := 'Zero';
1: Num2Str := 'One';
2: Num2Str := 'Two';
3: Num2Str := 'Three';
4: Num2Str := 'Four';
5: Num2Str := 'Five';
6: Num2Str := 'Six';
7: Num2Str := 'Seven';
8: Num2Str := 'Eight';
9: Num2Str := 'Nine';
10: Num2Str := 'Ten';
11: Num2Str := 'Eleven';
12: Num2Str := 'Twelve';
13: Num2Str := 'Thirteen';
14: Num2Str := 'Fourteen';
15: Num2Str := 'Fifteen';
16: Num2Str := 'Sixteen';
17: Num2Str := 'Seventeen';
18: Num2Str := 'Eightteen';
19: Num2Str := 'Nineteen'
end
end
end {Num2Str};
function GetFracture(Amount : Real) : string;
var
I : integer;
S : string;
begin
S := FloatToStr(Amount);
I := Pos('.',S);
Result := Copy(S,I+1,Length(S)-I);
end;
begin
Num:= Trunc(Amount);
Fracture:= Round(1000*Frac(Amount)); if Num > 0 then
Result := Num2Str(num);
if Fracture > 0 then
Result := Result + ' point ' + GetFracture(Amount);
end;又稍微修改了一下,我英文不好,小数点后面怎么表示不知道,楼主自己改改即可。