home *** CD-ROM | disk | FTP | other *** search
- {
- From: WAYNE MOSES
- Subj: Spell a Number
- ---------------------------------------------------------------------------
- *> Quoting Chris Serino to All on 01-04-94 17:28
- *> Re: Help Looking for a Number
-
- Hello Chris:
-
- CS> I'm in the process of writing a Checkbook program for my Job and I
- CS> was wondering if anyone out there has a routine to convert a check
- CS> amount written in numerical to text. Here's an example of what I
- CS> need. Input Variable : 142.50
- CS> Needed Output : One Hundred Foury Two 50/100--------------------
-
- Weeeelllll ... since I am not really interested in releasing my personal
- check writing program to the world, I'll upload what I wrote last month.
-
- ------- 8< ------------[ CUT LINE ]-------------- >8 -------
- }
- Function Translate(var DollarAmt : real) : string;
-
- (*
- This is a module that converts the numerical dollar amount to a string,
- for example it converts $156.15 to :
-
- 'One Hundred and Fifty Six dollars ------------15/xx'.
-
- The field length of the translated amount is limited to 53 characters.
-
- Amounts up to and including $99,999.99 are supported. I rarely write
- cheques larger than that, so they can be written by hand. ;-)
-
- ======================================================================
- Dedicated to the PUBLIC DOMAIN, this software code has been tested and
- used under TP 6.0/DOS and MS-DOS 6.2.
- ======================================================================
- *)
-
- const
- SingleSpelled : array[1..9] of string = ('One ','Two ','Three ','Four ',
- 'Five ','Six ','Seven ','Eight ',
- 'Nine ');
-
- TeenSpelled : array[1..9] of string = ('Eleven ','Twelve ','Thirteen ',
- 'Fourteen ','Fifteen ','Sixteen ',
- 'Seventeen ','Eighteen ','Nineteen');
-
- TenSpelled : array[1..9] of string = ('Ten ','Twenty ','Thirty ','Forty ',
- 'Fifty ','Sixty ','Seventy ','Eighty',
- 'Ninety ');
-
- var
- Dollars, Cents,
- SingleStr, TenStr, HundredStr, ThousandStr : string;
- Singles, Tens, Hundreds, Thousands, k, l : integer;
-
- begin
- if DollarAmt = 0 then (* The amount to be translated is 0.00 *)
- begin (* so the Dollars and Cents must be *)
- Dollars := 'Zero '; (* to reflect this. *)
- Cents := '00';
- end
-
- else
- begin (* Non trivial value for DollarAmt *)
-
- SingleStr := ''; TenStr := ''; HundredStr := ''; ThousandStr := '';
-
- { Parse the Cents out of DollarAmt }
-
- Str(frac(DollarAmt):0:2, Cents);
- if frac(DollarAmt) > 0 then
- Cents := copy(Cents,pos('.',Cents)+1,2)
- else
- Cents := '00';
-
- { Next parse the Dollars out of DollarAmt }
-
- Str(int(DollarAmt):1:0, Dollars);
-
- { Now, define the number of Singles, Tens, Hundreds, and Thousands }
-
- Thousands := trunc(DollarAmt/1000);
-
- Hundreds := trunc(DollarAmt/100)-Thousands*10;
- HundredStr := SingleSpelled[Hundreds];
-
- Tens := trunc(DollarAmt/10)-(Thousands*100+Hundreds*10);
-
- Singles := trunc(DollarAmt)-(Thousands*1000+Hundreds*100+Tens*10);
- SingleStr := SingleSpelled[Singles];
-
- case Tens of
- 1 : begin
- TenStr := TeenSpelled[Singles];
- SingleStr := '';
- end;
- 2..9 : TenStr := TenSpelled[Tens];
- end;
-
- case Thousands of
- 10,20,
- 30,50,
- 60,70,
- 80,90 : ThousandStr := TenSpelled[trunc(Thousands/10)];
- 1..9 : ThousandStr := SingleSpelled[Thousands];
- 11..19 : ThousandStr := TeenSpelled[Thousands-10];
-
- 21..29 : ThousandStr := TenSpelled[trunc(Thousands/10)]+
- SingleSpelled[Thousands-20];
- 31..39 : ThousandStr := TenSpelled[trunc(Thousands/10)]+
- SingleSpelled[Thousands-30];
- 41..49 : ThousandStr := TenSpelled[trunc(Thousands/10)]+
- SingleSpelled[Thousands-40];
- 51..59 : ThousandStr := TenSpelled[trunc(Thousands/10)]+
- SingleSpelled[Thousands-50];
- 61..69 : ThousandStr := TenSpelled[trunc(Thousands/10)]+
- SingleSpelled[Thousands-60];
- 71..79 : ThousandStr := TenSpelled[trunc(Thousands/10)]+
- SingleSpelled[Thousands-70];
- 81..89 : ThousandStr := TenSpelled[trunc(Thousands/10)]+
- SingleSpelled[Thousands-80];
- 91..99 : ThousandStr := TenSpelled[trunc(Thousands/10)]+
- SingleSpelled[Thousands-90];
- end;
-
- if Thousands > 0 then
- Dollars := ThousandStr+'Thousand '+HundredStr+'Hundred & '
- + TenStr + SingleStr
- else
- if (Hundreds > 0) and (Thousands = 0) then
- Dollars := HundredStr+'Hundred and '+ TenStr + SingleStr
- else
- Dollars := TenStr + SingleStr;
-
- end; (* End of block for non-trivial *)
- (* value for DollarAmt *)
- l := length(Dollars);
-
- for k := 1 to 60-(10+l+length(Cents)) do
- Dollars := Dollars+'-';
-
- If Thousands < 100 then
- Translate := Dollars+Cents+'/xx'
- else
- begin
- TextColor(Yellow+Blink);
- Translate := '******** INVALID! THIS AMOUNT NOT SUPPORTED ********';
- end;
- end;