[QUOTE][B]下面引用由[U]leon1235[/U]发表的内容:[/B]
我的数学运算是为 (3985/4095)*2.5
答案算出来为0,好奇怪,我改成下面的样式还是不行,都是0
long aa;
aa= (long)3985/(long)4095*(long...[/QUOTE]
强制转换只能是低级的转换成高级的 你不能把一个float转换成long
把式子转化成aa=3985*25/4095/10也无济于事 因为计算机仍然式先做3985*25的 而3985*25>65535
实际上3985*2.5/4095 完全在int型的表示范围内(小数不计) 可以这样解决
unsigned int aa;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
aa = (unsigned long)3985*25/4095;// 1 (结果是24)
aa = aa/10;//2 (结果是2)
}
这样的结果式aa=2 楼主应该是在12位AD冈量转换用到 其实你可以在第一句扩大个1000倍
aa = (unsigned long)3985*25*100/4095 然后把第2句aa = aa/10;//2 (结果是2)撤掉
这样得到的aa是你实际值的1000倍 只是在显示的时候 你在把小数点加上就OK 而且还保留了4位有效数字!
|