单片机 LCD1602 C语言小数怎么表示

很急!前提是用在单片机上的。
unsigned char speed //定义一个speed变量
然后后面有用到speed=1.1*ncounter ,这里ncounter是一个整数,计算得到了speed。然后要把这个数输出到LCD1602上。百位十位个位我都会输出。我是这样输出的
bai = speed/100; //单位 米
shi = speed%100/10;
ge = speed%10;
然后小数点后一位需要怎么输出啊大神们?要得到这个数字,不知道怎么得到。我这里有个网上拿到的,能做到输出但是不知道是什么意思,它是这样的
dian = (speed&0x0f)*62.5/100

大神们解释一下这个吧。或者给个更好的表示方法。我自己是这么表示的,结果乱码了
if(speed<1)
{
dian=speed*10;
}
if(speed>1 && speed<10)
{
dian=speed*10%10;
}
if(speed>10 && speed<100)
{
dian=speed*10%100;
}

1.首先你定义的speed是无符号字符型

在执行speed=1.1*ncounter 后speed的值也是整数,小数后面的数会被省略,你需要将speed定义为小数型:float speed;
2.你的ncounter是多大的数?是否比speed最大范围值大,如果大可能数据就乱了!
dian=speed*10,dian这个数也要同上考虑
3.小数点的数可以考虑使用:
dian=(speed%1)*10;//取出小数点后一位的数乘以10,变成整数显示,你要显示成小数显示程序里前面加个点的符号隔开就行了!追问

我已经理解了你说的了,先感谢一下。然后还想继续问一下,这里的dian ncounter 都是unsigned char。对于dian = (speed&0x0f)*62.5/100这句,有个回答是这样理解这一句。他说无符号字符型是八位,后四位是小数位,所以取这后四位。这里用4位表示小数,二进制表示小数,后一位是前一位的2分之一,这里有4位就是每一位是0.0625个单位。是这么说的,这是对的吗?

追答

按你那公式得到的也不是正确的小数啊

温馨提示:答案为网友推荐,仅供参考