C语言水平低下,问个关于单片机编程的低级问题

因为a/s和b/s都是小于0的数,所以我把x,y,T,EW,SN都设置成浮点型,可是执行时将结果通过串口在串口助手上显示,x,y都是0,单片机中用C语言编程小于0的数会变成0吗?还是其他什么原因?求解答,十分感谢!!!

这位大哥,小于0的数 和 浮点数 是两个不相干的事情。小于0的数是负数,浮点数是带小数的数,小数只要不是负数,也一样大于0,比如0.0000001还是大于0的。
x = a/s ,只有x是浮点数是不够的,因为看代码,a是整形的了,s 呢?如果s不是浮点的,两个整形相除,结果还是整形,x也只能得到整形。把式子改成 x = (float)a /(float)s,可保万无一失。
其次,要把小数传给串口,并不是把一个数字的字节一个一个发出去就行的。要自己算好要保留多少个小数位,然后用数学的方法把十进制的数字每一位的数字截取出来,变成字符,一个一个发出去。
比如,截取小数点后第一个数,char zifu = (char)(x * 10) % 10 ,这个式子,把一个小数乘以10,再除以10,得余数,这个余数就是小数点后第一个位的数字了,然后要把这个数转成ASC码发出去,计算机的串口通讯用字符显示才能显示出数字的值。一个位一个位的数字发出去,小数点也要单独发一个点的ASC码。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-03-09
估计是类型转换问题,浮点数参数传给要求是整数的函数。程序用整数去解释浮点数时,可能结果是0,或者不确定。

解决办法:注意类型转换。采用(int)强制转换,或者round(),floor()之类的函数进行转换。并同时考虑四舍五入问题。
相似回答