比如我输入123.11
就显示one hundred twenty three and 11/100
就显示one hundred twenty three and 11/100
解决方案 »
- 推荐一款可打连续纸的激光打印机
- ListView在顺序读取内容的添加Items时候,为什么不能按照读取的顺序一条一条显示出来,而是一次性的全部显示?为什么不能想Memo一样一条
- websnap应用中如何在网页上产生树形的东东
- 一个主机两个显示器,如何用程序控制主副显示器的自由切换,跪求!
- 大家看看这个东西该怎样实现
- 不好意思,想了解下Dephli的工资一般在什么价位,能统计下么?分三个巴
- 请问有没有人分析过vcl的结构
- 急!求一个模拟时钟的程序!!特别急我在面试
- 怎么搜索某个人的全部帖子呢?
- Delphi价格之我见
- 请问paradox 数据库最多能容纳多少条记录或支持到多大的存储空间.
- 《总有一天要轮到你!》Crossbow 跳楼推荐!
type
arr=array[1..9,1..3] of string;
var
num:arr;
lclast,temp:string;
i,code,len,lntimes,lnhundred,lnten,lnone,lntempnum:integer;
begin
lntimes:=0;
lclast:='';
num[1,1]:='ONE';
num[1,2]:='ELEVEN';
num[1,3]:='TEN';
num[2,1]:='TWO';
num[2,2]:='TWELVE';
num[2,3]:='TWENTY';
num[3,1]:='THREE';
num[3,2]:='THIRTEEN';
num[3,3]:='THIRTY';
num[4,1]:='FOUR';
num[4,2]:='FOURTEEN';
num[4,3]:='FORTY';
num[5,1]:='FIVE';
num[5,2]:='FIFTEEN';
num[5,3]:='FIFTY';
num[6,1]:='SIX';
num[6,2]:='SIXTEEN';
num[6,3]:='SIXTY';
num[7,1]:='SEVEN';
num[7,2]:='SEVENTEEN';
num[7,3]:='SEVENTY';
num[8,1]:='EIGHT';
num[8,2]:='EIGHTEEN';
num[8,3]:='EIGHTY';
num[9,1]:='NINE';
num[9,2]:='NINETEEN';
num[9,3]:='NINETY';
len:=length(lcnum);
for i:=1 to 12-len do
lcnum:=concat('0',lcnum);
for i:=0 to 3 do
begin
temp:=copy(lcnum,1+3*i,3);
val(temp,lntempnum,code);
lntimes:=lntimes+1;
if lntempnum=0 then
continue;
lnhundred:=lntempnum div 100;
lnten:=(lntempnum div 10) mod 10;
lnone:=lntempnum mod 10;
if lnhundred<>0 then
lclast:=concat(lclast,' ',num[lnhundred,1],' HUNDRED');
if (length(trim(lclast))<>0) and (lnhundred<>0) then
lclast:=concat(lclast,' AND');
if (lntimes=4) and (lnhundred=0) and (length(trim(lclast))<>0) then
lclast:=concat(lclast,' AND');
case lnten of
0:
begin
if lnone<>0 then
lclast:=concat(lclast,' ',num[lnone,1])
else
begin
temp:=copy(lclast,length(lclast)-2,3);
if temp='AND' then
lclast:=copy(lclast,1,length(lclast)-3);
end;//case 0 else
end;//case 0
1:
begin
if lnone<>0 then
lclast:=concat(lclast,' ',num[lnone,2])
else
lclast:=concat(lclast,' ',num[1,3]);
end;//case 1
else
if lnone<>0 then
lclast:=concat(lclast,' ',num[lnten,3],'-',num[lnone,1])
else
lclast:=concat(lclast,' ',num[lnten,3]);
end;//case1
case lntimes of
1:lclast:=concat(lclast,' BILLION');
2:lclast:=concat(lclast,' MILLION');
3:lclast:=concat(lclast,' THOUSAND');
end;//case2
end;//for
result:=lclast;
end;
{ }
{ Number to letters unit version 1.1 }
{ }
{ copyright (C) Dylan Thomas 2000 }
{ }
{ License: No significant restrictions. }
{ }
{ Language: US. English }
{ }
{**************************************************} unit NumberToLetters; interface {var Calls: Integer;} //Use to count number of recursive calls (* This function returns the written equivalent of a number. *)
function NumToLetters(Number: Real): string; implementation
uses SysUtils; type TNumberStr = string[13]; 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 = 1.00;
Max = 4294967295.99; function NumToLetters(Number: Real): string; function RecurseNumber(N: LongWord): string;
begin
{Inc(Calls);} //Use to count the number of recursive calls
case N of
1..19:
Result := Numbers[N];
20..99:
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} 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';
end
else
raise ERangeError.CreateFmt('%g ' + ErrorString + ' %g..%g',
[Number, Min, Max]);
end;{NumToLetters} end.