Is there a function convert $100.01 into amount in words?

Is there a function convert $100.01 into amount in words?

Postby ShumingWang » Fri Jul 20, 2007 1:40 am

Hi,
As title,convert amount in number into amount in words?
convert1(100.01,"US")--> Say US dollars one hunderd and one cent only ***

Thanks!

Shuming Wang
ShumingWang
 
Posts: 465
Joined: Sun Oct 30, 2005 6:37 am
Location: Guangzhou(Canton),China

Postby StefanHaupt » Fri Jul 20, 2007 7:47 am

Hi

here is a function from the old nanfor library, that does the job

Code: Select all  Expand view  RUN
/*
* File......: NTOW.PRG
* Author....: Gary Baren
* CIS ID....: 75470,1027
*
* This is an original work by Gary Baren and is hereby placed in the
* public domain.
*
* Modification history:
* ---------------------
*
*    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 )
kind regards
Stefan
StefanHaupt
 
Posts: 824
Joined: Thu Oct 13, 2005 7:39 am
Location: Germany

Postby ShumingWang » Sat Jul 21, 2007 1:48 am

Stefan,
Thank you !
Shuming Wang
ShumingWang
 
Posts: 465
Joined: Sun Oct 30, 2005 6:37 am
Location: Guangzhou(Canton),China


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 59 guests