Hello,
I have to convert a numeric to a scientific notation , How to ??
Any function ?
10000 ==> 1,E+04
Thanks
Convert Real to Scientific Format
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Convert Real to Scientific Format
Method-1
Method-2
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, 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
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
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
G. N. Rao.
Hyderabad, India
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Convert Real to Scientific Format
One more way:
We can compare performance of the above functions and choose the fastest.
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
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
- Enrico Maria Giordano
- Posts: 7355
- Joined: Thu Oct 06, 2005 8:17 pm
- Location: Roma - Italia
- Contact:
Re: Convert Real to Scientific Format
Try also this sample using C language:
EMG
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
- nageswaragunupudi
- Posts: 8017
- Joined: Sun Nov 19, 2006 5:22 am
- Location: India
- Contact:
Re: Convert Real to Scientific Format
Mr Enrico
Excellent idea !!!
Excellent idea !!!
Regards
G. N. Rao.
Hyderabad, India
G. N. Rao.
Hyderabad, India
Re: Convert Real to Scientific Format
Thanks for this feed back .