问题描述:
数码管显示数字,温度等(分辨率0.1),由于单片机浮点运算能力
会导致数值出现自动进位, 本来2.09会进位显示成2.1
例如当数值从 1.99加0.1时应该是2.09,数码管应该显示2.0,由于进位了就
会显示2.1,此时显示效果就会从1.9变成2.1,不是我们想要的加0.1.
或者从0到-0.1时会出现-0等现象的数值
根本原因是由于某些单片机浮点运算单元自身造成的,具体参考对应芯片的数据手册
解决代码
float chage_format(float data){
uint32_t temp; //2.09
uint8_t flag = 0;
uint8_t dif = 0;
if(data < 0){
data = data * (-1);
flag = 1;
}
temp = (uint32_t)(data*100); //209
dif = temp%10;
if((dif <= 9)&&(dif >= 5)){temp += (10 - dif);}
else if((dif >= 1)&&(dif <= 4)){temp -= dif;}
if(temp < 10){temp = 0;}
//printf(" %d ",temp);
data = (float)temp;
data = data/100;
if(flag){
data = data * (-1);
}
return data;
}
使用方法:
data += 0.1; //值加0.1之后
data = chage_format(data); //调用等于返回值即可