home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Media Share 9
/
MEDIASHARE_09.ISO
/
progmisc
/
nfsrc21.zip
/
NTOW.PRG
< prev
next >
Wrap
Text File
|
1991-08-16
|
4KB
|
140 lines
/*
* File......: NTOW.PRG
* Author....: Gary Baren
* CIS ID....: 75470,1027
* Date......: $Date: 15 Aug 1991 23:05:54 $
* Revision..: $Revision: 1.1 $
* Log file..: $Logfile: E:/nanfor/src/ntow.prv $
*
* This is an original work by Gary Baren and is hereby placed in the
* public domain.
*
* Modification history:
* ---------------------
*
* $Log: E:/nanfor/src/ntow.prv $
*
* Rev 1.1 15 Aug 1991 23:05:54 GLENN
* Forest Belt proofread/edited/cleaned up doc
*
* Rev 1.0 09 Jun 1991 00:26:56 GLENN
* Initial revision.
*
*/
/* $DOC$
* $FUNCNAME$
* FT_NTOW()
* $CATEGORY$
* Conversion
* $ONELINER$
* Translate numeric value to words
* $SYNTAX$
* FT_NTOW( <nNumber> ) -> cWords
* $ARGUMENTS$
* <nNumber> An integer to translate
* $RETURNS$
* A text string representing <nNumber>
* $DESCRIPTION$
* Translates numeric input to a text string.
*
* FT_NTOW is intended to be used with integers only. Since I don't
* know what your application will be, I can't assume the type of
* fraction you want returned (ninety nine cents, 99/100, .99, etc).
* If you want the fraction in words, just pass it as an integer.
*
* Do not pass a negative number! Handle negative numbers any way
* you need to in your code. (ie: CR, DB, Negative, Minus, etc.)
*
* Also, numeric 0 is returned as a null string. You will need to
* make a decision how to output it (zero dollars, no dollars, etc).
* $EXAMPLES$
* ? FT_NTOW( 999 ) -> Nine Hundred Ninety Nine
*
* ? FT_NTOW( 1000 ) -> One Thousand
*
* ? FT_NTOW( 23 ) + " Dollars and " + FT_NTOW( 99 ) + " Cents"
* -> Twenty Three Dollars and Ninety Nine Cents
*
* ? FT_NTOW( 23 ) + " Dollars and " + "99/100"
* -> Twenty Three Dollars and 99/100
*
* x := -23.99
* cents := str( (x - int( x )) * 100, 2, 0 ) + "/100"
* x := int( x )
* string := iif( x < 0, "Credit of ", "Debit of " )
* ? string + FT_NTOW( abs(x) ) + " Dollars and " + "99/100"
* -> Credit of Twenty Three Dollars and 99/100
* $END$
*/
static ones := { "", " One", " Two", " Three", " Four", " Five", ;
" Six", " Seven", " Eight", " Nine" ;
}
static teens := { " Ten", " Eleven", " Twelve", ;
" Thirteen", " Fourteen", " Fifteen", ;
" Sixteen", " Seventeen", " Eighteen", ;
" Nineteen" ;
}
static tens := { "", "", " Twenty", " Thirty", " Forty", " Fifty", ;
" Sixty", " Seventy", " Eighty", " Ninety" }
static qualifiers := { "", " Thousand", " Million", " Billion", " Trillion" }
#ifdef FT_TEST
function main( cNum )
return qout( ft_ntow( val( cNum ) ) )
#endif
function ft_ntow(nAmount)
local nTemp, sResult := " ", nQualNo
local nDiv := 10 ^ ( int( sol10(nAmount) / 3 ) * 3 )
nTemp := int(nAmount % nDiv)
nAmount := int(nAmount / nDiv)
nQualNo := int( sol10( nDiv ) / 3 ) + 1
sResult += grp_to_words(nAmount, qualifiers[ nQualNo ] )
if nTemp > (nDiv /= 1000) .and. (nDiv > 1)
sResult += ft_ntow( nTemp, nDiv )
else
sResult += grp_to_words(nTemp, "")
endif
return( ltrim(sResult) )
static function grp_to_words(nGrp, sQual)
local sResult := "", nTemp
nTemp := int(nGrp % 100)
nGrp := int(nGrp / 100)
sResult += ones[ nGrp + 1 ] + iif( nGrp > 0, " Hundred", "")
do case
case nTemp > 19
sResult += tens[ int( nTemp / 10 ) + 1 ]
sResult += ones[ int( nTemp % 10 ) + 1 ]
case nTemp < 20 .and. nTemp > 9
sResult += teens[ int( nTemp % 10 ) + 1 ]
case nTemp < 10 .and. nTemp > 0
sResult += ones[ int( nTemp) + 1 ]
endcase
return(sResult + sQual)
static function sol10( nNumber )
local sTemp
sTemp := ltrim( str( int(nNumber), 0) )
return( len(sTemp) - 1 )