Convert Real to Scientific Format

Post Reply
Jack
Posts: 249
Joined: Wed Jul 11, 2007 11:06 am

Convert Real to Scientific Format

Post by Jack »

Hello,

I have to convert a numeric to a scientific notation , How to ??

Any function ?

10000 ==> 1,E+04

Thanks
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Convert Real to Scientific Format

Post by nageswaragunupudi »

Method-1

Code: Select all

function N2E( nNum, nDec )

   local e := 0, cRet

   DEFAULT nDec := 2

   if nNum >= 10
      do while nNum >= 10
         nNum  /= 10
         e++
      enddo
   elseif nNum < 1
      do while nNum < 1
         nNum  *= 10
         e--
      enddo
   endif
   cRet  := Str( nNum, nDec + 2, nDec ) + " E " + If( e >= 0, "+", "" ) + LTrim( Str( e ) )

return cRet
 
Method-2

Code: Select all

function N2E( nNum, nDec )

   local e := 0, cRet

   DEFAULT nDec := 2

   e     := Floor( Log10( nNum ) )
   nNum  *= 10 ^ ( -e )

   cRet  := Str( nNum, nDec + 2, nDec ) + " E " + If( e >= 0, "+", "" ) + LTrim( Str( e ) )

return cRet
 
I personally like the approach in the second function. But I am not sure which is faster.

Also

Code: Select all

function N2E( nNum, nDec )

   local e := 0, nLog, cRet

   DEFAULT nDec := 2

   nLog  := Log10( nNum )
   e     := Floor( nLog )
   nNum  := 10 ^ ( nLog - e )
   cRet  := Str( nNum, nDec + 2, nDec ) + " E " + If( e >= 0, "+", "" ) + LTrim( Str( e ) )

return cRet
 
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Convert Real to Scientific Format

Post by nageswaragunupudi »

One more way:

Code: Select all

function N2SCI( nNum, nDec )

   local e  := 0
   local nAt, cRet

   DEFAULT nDec := 2

   cRet     := LTrim( Str( nNum ) )
   if nNum >= 10
      nAt   := At( ".", cRet + "." )
      e     := nAt - 2
      cRet  := Left( cRet, 1 ) + "." + SubStr( cRet, 2, nAt - 2 ) + SubStr( cRet, nAt + 1 )
      cRet  := LTrim( Str( Val( cRet ), nDec + 2, nDec ) )
      cRet  += " E +" + LTrim( Str( e ) )
   elseif nNum < 1
      nAt   := 3
      do while SubStr( cRet, nAt, 1 ) == '0'
         nAt++
      enddo
      e     := nAt - 2
      cRet  := SubStr( cRet, nAt, 1 ) + "." + SubStr( cRet, nAt + 1 )
      cRet  := LTrim( Str( Val( cRet ), nDec + 2, nDec ) )
      cRet  += " E -" + LTrim( Str( e ) )
   else
      cRet  := Str( nNum, nDec + 2, nDec ) + " E +0"
   endif

return cRet
 
We can compare performance of the above functions and choose the fastest.
Regards

G. N. Rao.
Hyderabad, India
User avatar
Enrico Maria Giordano
Posts: 7355
Joined: Thu Oct 06, 2005 8:17 pm
Location: Roma - Italia
Contact:

Re: Convert Real to Scientific Format

Post by Enrico Maria Giordano »

Try also this sample using C language:

Code: Select all

#include "Fivewin.ch"


FUNCTION MAIN()

    ? N2E( 10000 )

    RETURN NIL



#pragma BEGINDUMP

#include "hbapi.h"


HB_FUNC( N2E )
{
    char Buf[ 100 ];

    sprintf( Buf, "%E", hb_parnd( 1 ) );

    hb_retc( Buf );
}

#pragma ENDDUMP
EMG
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Convert Real to Scientific Format

Post by nageswaragunupudi »

Mr Enrico

Excellent idea !!!
Regards

G. N. Rao.
Hyderabad, India
Jack
Posts: 249
Joined: Wed Jul 11, 2007 11:06 am

Re: Convert Real to Scientific Format

Post by Jack »

Thanks for this feed back .
Post Reply