/* * $Id$ */ /* * File......: d2e.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.2 15 Aug 1991 23:05:02 GLENN * Forest Belt proofread/edited/cleaned up doc * * Rev 1.1 14 Jun 1991 19:51:24 GLENN * Minor edit to file header * * Rev 1.0 09 Jun 1991 00:27:06 GLENN * Initial revision. * */ #define log10( num ) log( num ) / log( 10 ) #define DEFAULT_PRECISION 6 #command DEFAULT

TO =>

:= iif(

== NIL, ,

) #ifdef FT_TEST function main( cNum, cPrec ) DEFAULT cPrec TO str( DEFAULT_PRECISION ) return qout( ft_d2e( val(cNum), val(cPrec) ) ) #endif function ft_d2e( nDec, nPrecision ) local nExp, sScn DEFAULT nPrecision TO DEFAULT_PRECISION if nDec == 0 nExp := 0 elseif abs( nDec ) < 1 nExp := int( log10( nDec ) ) - 1 else nExp := int( log10( abs(nDec)+0.00001 ) ) /* 0.00001 == kludge */ endif /* for imprecise logs */ nDec /= 10 ^ nExp if round( abs(nDec), nPrecision ) >= 10 nDec /= 10 nExp++ endif another kludge for stuff like '999999999' sScn := ltrim( str( nDec, nPrecision + 3, nPrecision ) ) return sScn + 'E' + alltrim( str( nExp, 5, 0 ) )