c:math:value

C++ Reference

float expdcm(int y) {

int i;float a;
a=1.0;if (y > 0) for (i=0;i < y;i++) a*=10.0;
      if (y < 0) for (i=0;i > y;i--) a/=10.0;
return a;

}

int cvalue(char *str,float *a,int *intflg) {

int c,ist,err;
int ix,ie;
int ictr1,ictr2;
float dx;
  • a=0.0;*intflg=ON;

ie=0;ist=0;err=0;

ictr1=0;ictr2=0;
while ((c=(*str++)) != '\0') {
	if (c >= '0' && c <= '9') {		   //only 0-9 and "."
		ix=c-'0';dx=ix;				   //dx = the int.
		if      (ist >= 0 && ist <= 2) {
			*a=*a*10.0+dx;			   //a is added by the current int to be equivalent value.
			if (ictr1 != 0 || c != '0') ictr1++;  //0 comes at the beginin' --> ictr1++.
			ist=2;					   //ist = 2
		}
		else if (ist >= 3 && ist <= 4) {	  //After the DOT.
			ictr2++;
			*a=*a+dx*expdcm(-ictr2);
			ist=4;
			intflg=OFF;
		}
		
		else {								 //exception
			err=3;*a=0.0;
			return err;
		}
	}
	else if (c == '.') {		
		if (ist >= 0 && ist <= 2) {
			ist=3;
			*intflg=OFF;
		}
		else {					//if the DOT appear twice.
			err=7;*a=0.0;
			return err;
		}
	}
	else {						//exception.
		err=1;*a=0.0;
		return err;
	}
}
if ((ist >= 2 && ist <= 4)) {
  • a=*a*expdcm(ie);

err=0;

	if ((*a-(int)(*a)) != 0.0) *intflg=OFF;
	return err;
}
else {
	err=2;*a=0.0;
	return err;
}

} =============================================================================== Purpose: Change a string to a float number ===============================================================================// int value(char *str,float *a) {

int intflg;
return cvalue(str,a,&intflg);

}