不解,printf打印Double出来是错的

mega8 2011-06-30 08:32:08
不解,下面这条语句
printf("%.7f ,%.7f, %d ]",GPSData2.Latitude.lat,GPSData2.Longitude.lon,GPSData2.Status);执行后的结果是
26815622288819700000....0.0000000 ,2.0000005, 1079719639 ],我在调试时能看见GPSData2.Latitude.lat,GPSData2.Longitude.lon,GPSData2.Status这三个数的值都是正确的,打出来就错了。现在可以确定是打印出的错,但是不解啊,
GPSData2.Latitude.lat,GPSData2.Longitude.lon定义为Double,GPSData2.Status定义为u8.
注意:.....中包括至少10个0,发帖时说包含太多字符串我简化了。
...全文
573 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
AnYidan 2011-07-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 mega8 的回复:]

引用 8 楼 babilife 的回复:
引用 7 楼 mega8 的回复:
呵呵,我查了下,在print中double使用%f打印的,没有%lf这一用法,


%f 对应的是float
%lf 对应的是double

还是多看基础书吧

呵呵,只有在scanf中才区分%f 和%lf;
printf中是不区分的,因为都转为double了
[/Quote]

printf 的用法用没有 %lf ,

lz 究竟打印除了什么?怀疑与你的精度设定为 7 有关
OLDMAN_Tbag 2011-07-01
  • 打赏
  • 举报
回复
%lf 打印
mega8 2011-07-01
  • 打赏
  • 举报
回复
我也怀疑是数据存储或者出入栈时导致的,
mega8 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 babilife 的回复:]
引用 7 楼 mega8 的回复:
呵呵,我查了下,在print中double使用%f打印的,没有%lf这一用法,


%f 对应的是float
%lf 对应的是double

还是多看基础书吧
[/Quote]
呵呵,只有在scanf中才区分%f 和%lf;
printf中是不区分的,因为都转为double了
至善者善之敌 2011-06-30
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mega8 的回复:]
呵呵,我查了下,在print中double使用%f打印的,没有%lf这一用法,
[/Quote]

%f 对应的是float
%lf 对应的是double

还是多看基础书吧
mega8 2011-06-30
  • 打赏
  • 举报
回复
呵呵,我查了下,在print中double使用%f打印的,没有%lf这一用法,
mega8 2011-06-30
  • 打赏
  • 举报
回复
typedef struct{
u8 Indicator;
double lat;
}Latitude_TYPE;
typedef struct{
u8 Indicator;
double lon;
}Longtitude_TYPE;
u8 Status;
typedef unsigned char 这是数据定义,
我的编译环境是uvision v4,硬件平台是stm32,我这是在单片机上跑的程序,
赵4老师 2011-06-30
  • 打赏
  • 举报
回复
double用%lg
就想叫yoko 2011-06-30
  • 打赏
  • 举报
回复
double用 lf%打印
ljhhh0123 2011-06-30
  • 打赏
  • 举报
回复
把你的数据结构定义贴上来。编译环境是什么?操作系统是什么?
至善者善之敌 2011-06-30
  • 打赏
  • 举报
回复
GPSData2.Latitude.lat,GPSData2.Longitude.lon定义为Double,GPSData2.Status定义为u8.

这里DOUBLE 是lf%
u8 ? unsigned int = u8 ? %u
qq120848369 2011-06-30
  • 打赏
  • 举报
回复
%lf %u
ljhhh0123 2011-06-30
  • 打赏
  • 举报
回复
你的问题可能就是你赋予lat的值和输出时不太一样吧。
那是浮点表示法,不是每个数存入后都能按原样提取出来的。

浮点表示的规则就是:用不太精确的方法表示一个极大的范围。
整数则是精确的表示一个固定的范围。

我用89c51验证了,没问题。

70,020

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧