`#include <stdio.h>
/**
*******************************************************************************
* @brief 字符串转数字 函数
* @param [in] *str 字符串指针
* @return 转换数值
* @note
*******************************************************************************
*/
double StringToNumber(char* str)
{
char* p = str;
char maskNegative = 0; //负数标记
char mulIntegral = 10; //整数倍数
double mulDecimal = 1; //小数倍数
double result = 0;
while(1) //限定转换长度,若以特殊结束符 结束,此长度大于结束符便宜长度即可
{
if(*p == '-'){
p++; maskNegative = 1;} //是负数
if(*p == '.'){
p++; mulIntegral = 1;} //遇到小数点了
if( (*p<'0') || ('9'<*p) ){
break;} //有非法字符 或 结束符号 ','、 '*'
if(mulIntegral == 1)mulDecimal *= 0.1; //小数倍数改变
result = (result * mulIntegral) + ((*p-'0') * mulDecimal); //字符转数值
p++;
}
if(maskNegative) result = -result; //处理负数
return result;
}
/**
*******************************************************************************
* @brief 主 函数
* @param [in] None
* @return None
* @note
*******************************************************************************
*/
int main(void)
{
char a[] = "-2239.37849";
char b[] = "111.1111";
char c[] = "22222";
printf("数值a:%f \n", StringToNumber(a) );
printf("数值b:%f \n", StringToNumber(b) );
printf("数值c:%d \n", (int)StringToNumber(c) );
}`
运行结果: