Re: Convert number to letters
| From: | MrBaseball34 | Date: | Tue, 04 Dec 2001 15:07:45 +0000 |
| Subject: | Re: Convert number to letters | ||
| References: | 1 | Groups: | php.windows |
| Request: | Send a blank email to php-windows+get-10722@lists.php.net to get a copy of this message | ||
In article <20011204070103.55643.qmail@pb1.pair.com>, m581@yahoo.com says...
> Hi all
> How can convert number to letters in PHP?
> ( for example 254=two handres and fifty four )
>
> Thanks for help
Here's a NumtoWords function in Pascal. I don't have one
in PHP...Maybe someone could convert it for us...<bg>
(***********************************************************************
NumToWords( <dAmount> ) - Converts a number to its spoken value.
Example:
NumToWords(234.56)
returns "Two Hundred Thirty-Four and 56/100ths'
***********************************************************************)
function NumToWords( dAmount: Double ): String;
var
cString : String;
iTemp : LongInt;
XX : LongInt;
dPow : Double;
function NWord( nAmount: Integer ): String;
const
AWords: array[1..27] of String[9] = ( 'One', 'Two', 'Three',
'Four',
'Five', 'Six', 'Seven', 'Eight',
'Nine', 'Ten', 'Eleven',
'Twelve', 'Thirteen', 'Fourteen', 'Fifteen',
'Sixteen',
'Seventeen', 'Eighteen', 'Nineteen',
'Twenty', 'Thirty',
'Forty', 'Fifty', 'Sixty', 'Seventy',
'Eighty', 'Ninety');
var
sTemp: String;
nTemp: LongInt;
begin
sTemp := '';
if (nAmount > 99) then
begin
nTemp := nAmount div 100;
sTemp := sTemp + AWords[nTemp] + ' Hundred';
nAmount := nAmount - (nTemp * 100);
if nAmount > 0 then
sTemp := sTemp + #32;
end; {if (nAmount > 99)}
if ( nAmount > 0 ) and (nAmount < 20) then
sTemp := sTemp + AWords[nAmount]
else if ( nAmount > 19 ) then
begin
nTemp := nAmount div 10;
sTemp := sTemp + AWords[nTemp + 18];
nAmount := nAmount - nTemp * 10;
if (nAmount <> 0) then
sTemp := sTemp + '-' + AWords[nAmount];
end; {if ( nAmount > 0 ) and (nAmount < 20)}
Result := sTemp;
end; { Static Function NWord() }
(*********************** Immediate IF String **************************
IIFS(<bCond>, <sTrue>, <sFalse>) - Evaluates <bCond>. If true, the
string <sTrue> is returned; if false, the string <sFalse> is
returned.
Example:
sTestResult := 'Your score was ' +
IIFS((passed), 'passing', 'failing');
***********************************************************************)
function IIFS( bCond: Boolean; sTrue, sFalse: String): String;
begin
if (bCond) then
Result := sTrue
else
Result := sFalse;
end; {function IIFS()}
begin
cString := '';
XX := 6;
while (XX > -3) do
begin
dPow := Pow( 10, XX );
if (dAmount >= dPow) then
begin
iTemp := Trunc(dAmount / dPow);
cString := cString + NWord(iTemp) + IIFS( XX = 6, ' Million',
IIFS( XX = 3, ' Thousand', ''));
dAmount := dAmount - (iTemp * dPow);
if (dAmount > 0) then
cString := cString + #32;
end; {if (dAmount >= dPow)}
Dec( XX, 3 );
end; {while (XX > -3)}
if ((dAmount - Trunc(dAmount)) > 0) then
begin
iTemp := Trunc(dAmount * 100);
cString := cString + 'and ' +
IntToStr(iTemp) + '/100ths';
end {if ((dAmount - Trunc(dAmount)) > 0)}
else
cString := cString + ' exactly';
Result := cString;
end; {function NumToWords()}