解决数码管显示浮点数跳值显示的问题

本文介绍了在单片机中处理浮点数显示时遇到的进位错误问题,如2.09显示为2.1。为解决这个问题,提供了一段代码`floatchange_format`,通过将浮点数转换为整数并进行校正,避免因浮点运算导致的不准确显示。该方法适用于需要高精度显示的小数点后一位数值,例如温度显示。代码中包含了负数处理和四舍五入逻辑,确保在特定范围内正确显示数值变化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:

数码管显示数字,温度等(分辨率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);  //调用等于返回值即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

漏洞百出

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值