diff --git a/version2.0/nasal_misc.h b/version2.0/nasal_misc.h index 9d32355..b266027 100644 --- a/version2.0/nasal_misc.h +++ b/version2.0/nasal_misc.h @@ -33,18 +33,18 @@ inline bool check_oct_string(std::string str,int len) inline bool check_dec_string(std::string str,int len) { int dot_cnt=0; + if(str[0]=='.') return false; + if(str[0]=='0' && ('0'<=str[1] && str[1]<='9')) return false; int i=0; for(;i'9') - return false; + else if(str[i]=='e' || str[i]=='E') break; + else if(str[i]<'0' || str[i]>'9' ) return false; } if(str[i]=='e' || str[i]=='E') { @@ -59,8 +59,7 @@ inline bool check_dec_string(std::string str,int len) if(str[i]<'0' || str[i]>'9') return false; } - if(dot_cnt>1 || str[0]=='.' || (!dot_cnt && str[0]=='0')) - return false; + if(dot_cnt>1) return false; return true; } @@ -92,10 +91,9 @@ bool check_numerable_string(std::string str) trans_string_to_number: convert string to number */ -inline double hex_to_double(std::string str) +inline double hex_to_double(std::string str,int len) { double ret=0; - int len=str.length(); double num_pow=1; for(int i=len-1;i>1;--i) { @@ -109,10 +107,9 @@ inline double hex_to_double(std::string str) } return ret; } -inline double oct_to_double(std::string str) +inline double oct_to_double(std::string str,int len) { double ret=0; - int len=str.length(); double num_pow=1; for(int i=len-1;i>1;--i) { @@ -121,10 +118,9 @@ inline double oct_to_double(std::string str) } return ret; } -inline double dec_to_double(std::string str) +inline double dec_to_double(std::string str,int len) { double ret=0; - int len=str.length(); int i=0; for(;i1) + if(!len) return 0; + if(str[0]=='-' && len>1) { is_negative=true; std::string tmp=""; - for(int i=1;i2 && str[0]=='0' && str[1]=='x') - ret_num=hex_to_double(str); - else if(str.length()>2 && str[0]=='0' && str[1]=='o') - ret_num=oct_to_double(str); + else if(len>2 && str[0]=='0' && str[1]=='x') + ret_num=hex_to_double(str,len); + else if(len>2 && str[0]=='0' && str[1]=='o') + ret_num=oct_to_double(str,len); else if('0'<=str[0] && str[0]<='9') - ret_num=dec_to_double(str); + ret_num=dec_to_double(str,len); return is_negative?-ret_num:ret_num; } @@ -200,7 +194,7 @@ std::string trans_number_to_string(double number) if(number<0) { trans_num_string+='-'; - number*=-1; + number=-number; } double integer_bit=1; while(number>=integer_bit)