如何将输入的温度字符串转换成温度数值
需求:最近在做一个新风空调温度控制项目,在设置温度模块需要对输入的温度进行读取,输入框中读取到的是字符串格式,比如 "25.0",怎么将其转换成int类型的数据,比如将"25.0"转换成int 250 进而判断温度值调节温度呢?

分析:先来分析一下可能出现的情况,输入可能出现 "25.5"、"24.0",这都属于正常的情况,如果操作员输入了 "24",或者"24.",也得将其转换成int 240,还有不小心手抖输入了"24.."或者"25..5",就需要提示错误输入。
思路:这个问题经过好几次修改和调试bug之后,菜鸟(me)终于确定了通过小数点来判断情况的解决思路,先数一下输入的字符串中有几个小数点,然后分3种情况讨论,代码中注释的很清晰。代码用到了C库中的字符串拼接函数strcat()和字符转数字函数atoi()
/**
* @brief 将温度输入框中的字符串转换为温度值
* @param Temp_s
* @retval uint16_t 正确返回温度值 错误返回 -1
*/
int16_t lv_temp_str2num(const char* Temp_s)
{
char str[8] = {0};
uint8_t point_num = 0; //用于记录小数点的个数
uint8_t point_pos = 0; //用于记录小数点的位置
strcpy(str, Temp_s); //拷贝温度输入字符串到 str 中
/* 先数一下字符串中有几个'.' */
for(uint8_t i=0; i<strlen(str); i++)
{
if(str[i] == '.')
{
point_num++;
point_pos = i;
}
}
/* 对小数点的个数分情况判断 */
//如果输入的字符串中没有'.',补'0'后转数字,例如:"23"->230
if(point_num == 0)
{
strcat(str, "0");
return (atoi(str));
}
//如果'.'的个数超过1个,返回错误
else if(point_num > 1){
return -1;
}
//如果'.'的个数等于1,对小数点的位置判断
else{
//如果小数点在末尾,直接将'.'替换成'0',例如:“23.”->230
if(point_pos == strlen(str) - 1)
{
str[point_pos] = '0';
}else{ //如果小数点不在末尾,将'.'去掉后转数字,例如:"23.5"->235
str[point_pos] = '\0';
strcat(str, (str + point_pos + 1));
}
return(atoi(str));
}
}
本文档介绍了一个C语言实现的函数,用于将空调温度控制项目中输入的字符串格式温度转换为整型数值。函数首先统计小数点数量,根据小数点个数判断输入是否有效,然后进行相应的转换或错误处理。例如,将25.0转换为250,24.转换为240,同时能检测并处理无效输入如24..或25..5。
391

被折叠的 条评论
为什么被折叠?



