問題如下:現有一二進制 整數 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)有效數字?該怎樣進行轉換?
實際中肯定會有類似問題! |