TNumberStr = String[130;
const
Numbers: array[1..19] of TNumberStr = ('ONE', 'TWO', 'THREE', 'FOUR', 'FIVE',
'SIX', 'SEVEN', 'EIGHT', 'NINE', 'TEN', 'ELEVEN', 'TWELVE', 'THIRTEEN',
'FOURTEEN', 'FIFTEEN', 'SIXTEEN', 'SEVENTEEN', 'EIGHTEEN', 'NINETEEN');
Tenths: array[1..9] of TNumberStr = ('TEN', 'TWENTY', 'THIRTY', 'FORTY',
'FIFTY', 'SIXTY', 'SEVENTY', 'EIGHTY', 'NINETY');
ErrorString = 'not in valid range';
Min = 0.00;
Max = 4294967295.99;
function RecurseNumber(N: LongWord): string;
begin
{Inc(Calls);} //Use to count the number of recursive calls
case N of
0:
Result := '';//'ZERO';
1..19:
Result := Numbers[N];
20..99:
//Result := Tenths[N div 10] + '-' + RecurseNumber(N mod 10);
Result := Tenths[N div 10] + ' ' + RecurseNumber(N mod 10);
100..999:
Result := Numbers[N div 100] + ' HUNDRED ' + RecurseNumber(N mod 100);
1000..999999:
Result := RecurseNumber(N div 1000) + ' THOUSAND ' +
RecurseNumber(N mod 1000);
1000000..999999999: Result := RecurseNumber(N div 1000000) + ' MILLION ' + RecurseNumber(N mod 1000000);
1000000000..4294967295: Result := RecurseNumber(N div 1000000000) +
' BILLION ' + RecurseNumber(N mod 1000000000);
end; {Case N of}
end; {RecurseNumber}
function NumToLetters(Number: Real): string;
begin
{Calls := 0;} //Use to count the number of recursive calls
if (Number >= Min) and (Number <= Max) then
begin
Result := RecurseNumber(Round(Int(Number)));
{Added for cents in a currency value}
if not(Frac(Number) = 0.00) then
//Result := Result + ' and ' + IntToStr(Round(Frac(Number) * 100)) + '/100';
Result := Result + ' AND ' + RecurseNumber(Round(Frac(Number) * 100))+ ' CENTS';
end
else
raise ERangeError.CreateFmt('%g ' + ErrorString + ' %g..%g', [Number, Min, Max]);
end;{NumToLetters}
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/166523/viewspace-204047/ ,如需转载,请注明出处,否则将追究法律责任。