const TCHAR* p = _T(" +112.2");
//const TCHAR* p = _T("1.23456E+3");
TCHAR szSign[2] = {0, 0};
long double factor;
unsigned int expo;
while(isspace(*p))
p++;
if (*p == _T('+') || *p == _T('-'))
{
szSign[0] = *p;
p++;
}
//zhengshu
long double value = 0.L;
while ((*p - _T('0')) < 10u) //(*p != _T('.'))
{
value = value*10 + (*p - _T('0'));
p++;
}
if ( *p == _T('.') )
{
factor = 1.;
p++;
while ( (unsigned int)(*p - _T('0')) < 10u )
{
factor *= 0.1;
value += (*p++ - '0') * factor;
}
}
if (*p | 32 == _T('e'))
{
expo = 0;
factor = 10.L;
switch(*++p)
{
case _T('-'):
factor = 0.1;
break;
case _T('+'):
p++;
break;
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
break;
default :
value = 0.L;
return;
}
while ((unsigned int)(*p - _T('0')) < 10u)
expo = expo*10 + (*p++ - _T('0'));
while ( 1 )
{
if ( expo & 1 )
value *= factor;
if ( (expo >>= 1) == 0 )
break;
factor *= factor;
}
}
//const TCHAR* p = _T("1.23456E+3");
TCHAR szSign[2] = {0, 0};
long double factor;
unsigned int expo;
while(isspace(*p))
p++;
if (*p == _T('+') || *p == _T('-'))
{
szSign[0] = *p;
p++;
}
//zhengshu
long double value = 0.L;
while ((*p - _T('0')) < 10u) //(*p != _T('.'))
{
value = value*10 + (*p - _T('0'));
p++;
}
if ( *p == _T('.') )
{
factor = 1.;
p++;
while ( (unsigned int)(*p - _T('0')) < 10u )
{
factor *= 0.1;
value += (*p++ - '0') * factor;
}
}
if (*p | 32 == _T('e'))
{
expo = 0;
factor = 10.L;
switch(*++p)
{
case _T('-'):
factor = 0.1;
break;
case _T('+'):
p++;
break;
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
case 9:
break;
default :
value = 0.L;
return;
}
while ((unsigned int)(*p - _T('0')) < 10u)
expo = expo*10 + (*p++ - _T('0'));
while ( 1 )
{
if ( expo & 1 )
value *= factor;
if ( (expo >>= 1) == 0 )
break;
factor *= factor;
}
}