先看以下代码:
uint8_t get_stage(uint16_t cur_val, uint16_t init_val)
{
uint8_ state = 0;
float rate = cur_val / init_val;
if (rate > 0.5) {
state = 10;
} else if (rate > 0.2) {
state = 20;
} else if (rate > 0.000001) {
state = 50;
} else {
state = 80;
}
return state;
}
看似很正常,其实结果却是state永远返回80,原因就是:float rate = cur_val / init_val;
当cur_val < init_val时,state = 0.0;这是因为类型转换的问题;
修改为:float rate = (float)cur_val / init_val;就没问题了。
简单而容易忽略的问题!