#include "float.h" //定义浮点数组 最大数组长度 #define StrExtFloat_flen 64 //定义最大字符串长度 #define StrExtFloat_slen 512 /** * @brief 多个浮点串转换, 确保不溢出 * @param [in] num * @param [in] Str * * @details 加入负数功能, 支持空格分开,多个空格 * usage: * char Str[100]="235.654hjfv92.88u98fj3wjf09w43f0f3f963.369"; * float num[StrExtFloat_flen] = {0.}; * StrExtFloat(num,Str); */ void StrExtFloat(float *num,char* Str) { //遍历深度 int Fflag = 0; //数字个数 int Fnum = 0; char num_start = 0,num_point = 0; float NorP = 1; /* 正数 负数 */ //遍历到字符串尾部 while ( *Str != '\0' ) { Fflag++; //防止查询超过边界 if(Fflag>StrExtFloat_slen) break; //判断是不是数字 if( *Str == '-' ) { NorP = -1; } else if(*Str >='0' && *Str <= '9') { //printf("%c",*Str); //判断数字存在 num_start = 1; //判断是否存在小数点 if(num_point >= 1) { num_point++; //当前小数部分的数值 float fpoint = *Str - '0'; for(int i = 1;iStrExtFloat_slen) // break; //判断是不是数字 if( *Str == '-' ) { NorP = -1; } else if(*Str >='0' && *Str <= '9') { // printf(".... %c \r\n",*Str); //判断数字存在 num_start = 1; //判断是否存在小数点 if(num_point >= 1) { num_point++; //当前小数部分的数值 float fpoint = *Str - '0'; for(int i = 1;i6");} // log_i(" after f HEX %08X\r\n", (uint32_t *) f); } /* strtod用法 #include #include #include int main(void) { // parsing with error handling const char *p = "111.11 -2.22 Nan nan(2) inF 0X1.BC70A3D70A3D7P+6 1.18973e+4932zzz"; printf("Parsing '%s':\n", p); char *end; for (double f = strtod(p, &end); p != end; f = strtod(p, &end)) { printf("'%.*s' -> ", (int)(end-p), p); p = end; if (errno == ERANGE){ printf("range error, got "); errno = 0; } printf("%f\n", f); } // parsing without error handling printf("\" -0.0000000123junk\" --> %g\n", strtod(" -0.0000000123junk", NULL)); printf("\"junk\" --> %g\n", strtod("junk", NULL)); } */