问题如下:现有一二进制 整数 1111 而我要把它表示为十进制小数点后两位有效数字?在DX18B20温度小数转换碰到的问题!要用最简单直接的方法,不要出现2的负几次方之类的转换! 向高手求救谢谢!
补充问题:
用DS18B20精确到小数点后一位的温度测量实现
DS18B20的测量温度范围为 -55°C~+125°C,在-10~+85°C范围内,精度为±0.5°C
从DS18B20输出的后4位就是小数点后的数,其数值乘与0.0625就是实际的温度,大家知道,在8位的51单片机中,做个乘法并不容易,而且DS18B20精度为±0.5°C,有的算法直接舍去从而精确到1°C
1,我看到有些程序用查表法确定精度,这是一个很好的方法!但查表法有它的弱点要列表!
2,也看到有同志用这样的方法,
如果a是从18B20里读来的低8位值
xiaoshu1 = (a&0x0f)*10/16; //小数第一位
xiaoshu2 = (a&0x0f)*100/16%10;//小数第二位
xiaoshu=xiaoshu1*10+xiaoshu2; //小数两位
这里我就是弄不懂为什么是乘以十就是小数第一位 乘以一百就是小数第二位?
尽管精度是0.5C,没有实际意义,但这种算法是有用的,就是不知道其原理?
所以引申问题:现有一二进制 整数 N位 而我要把它表示为十进制小数点后M位(M<N)有效数字?该怎样进行转换?
实际中肯定会有类似问题! |