OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4279|回复: 5

使用STM32F103无法判断两个相等的double型

[复制链接]

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-5-6
在线时间
0 小时
发表于 2015-5-13 14:57:01 | 显示全部楼层 |阅读模式
5金钱
      我是用STM32F103RBT6最小开发板系统,从串口输入两个字符型数据,在转换成double型后,与程序中设置好的两个double型数据进行比较,如果两个都相等,则向串口助手输出yes,否则输出比较结果。
程序如下:
[mw_shl_code=c,true]#include "led.h" #include "delay.h" #include "key.h" #include "sys.h" #include "usart.h" #include "timer.h" #include "my.h" char gps_name[6]={48},gps_date[100]={48}; int main(void) { int i,j; char gps_time[11]={48},gps_weidu[9]={48},gps_jingdu[10]={48}; double weidu,jingdu,weidu1=25.1903,jingdu1=110.2487; SystemInit(); delay_init(); //延时函数初始化 NVIC_Configuration(); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级 uart_init(9600); //串口初始化为9600 delay_ms(10); while(1) {     if(gps_date[11]=='A') //判断数据有效性,数据有效 { for(i=13,j=0;i<20;i++,j++) //提取纬度信息 gps_weidu[j]=gps_date; for(i=25,j=0;i<33;i++,j++) //提取经度信息 gps_jingdu[j]=gps_date; weidu=str_to_double(gps_weidu);                            //字符型转换为double型 jingdu=str_to_double(gps_jingdu); printf("%f\t%f\t",weidu,weidu1); printf("%f\t%f\t",jingdu,jingdu1); if((weidu>weidu1)&&(jingdu>jingdu1)) printf("fall back,to the left\n"); else if((weidu>weidu1)&&(jingdu<jingdu1)) printf("fall back,to the right\n"); else if((weidu<weidu1)&&(jingdu>jingdu1)) printf("go ahead,to the left\n"); else if((weidu<weidu1)&&(jingdu<jingdu1)) printf("go ahead,to the right\n"); else if((weidu-weidu1>-0.00001)&&(weidu-weidu1<0.00001)&&(jingdu<jingdu1)) printf("to the right\n"); else if((weidu-weidu1>-0.00001)&&(weidu-weidu1<0.00001)&&(jingdu>jingdu1)) printf("to the left\n"); else if((weidu>weidu1)&&(jingdu-jingdu1<0.00001)&&(jingdu-jingdu1>-0.00001)) printf("fall back\n"); else if((weidu<weidu1)&&(jingdu-jingdu1<0.00001)&&(jingdu-jingdu1>-0.00001)) printf("go ahead\n"); else if((weidu-weidu1>-0.00001)&&(weidu-weidu1<0.00001)&&(jingdu-jingdu1<0.00001)&&(jingdu-jingdu1>-0.00001)) printf("OK\n"); } } } [/mw_shl_code]

接收到的weidu与weidu1相比较,即使两者相等,即weidu=25.1903,weidu1=25.1903,
得到的判断结果却是weidu>weidu1,而程序却能正确判断jingdu==jingdu1。采用了直接比较相等,取大于负数小于正数两种判断方法也都没用,使用Vistual C模拟输出结果又能正确比较,这是STM32F103的问题吗?

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

28

主题

1489

帖子

0

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
1656
金钱
1656
注册时间
2013-7-24
在线时间
1 小时
发表于 2015-5-13 15:29:08 | 显示全部楼层
楼主还可以,没用等号判断大小。
于20150522停用该账号:http://www.microstar.club
回复

使用道具 举报

11

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2014-8-4
在线时间
14 小时
发表于 2015-5-13 19:30:15 | 显示全部楼层
领教了  浮点数比较相等我可以把浮点数转换成字符串再比较
生命不息,学习不止
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-5-6
在线时间
0 小时
 楼主| 发表于 2015-5-13 20:03:36 | 显示全部楼层
回复【3楼】liuzhenwei2014:
---------------------------------
我是为了以后进一步的数据处理才把字符型转换成浮点型,又转换回去这我觉得有点多余,不过如果实在找不到解决办法倒是一个选择
回复

使用道具 举报

2

主题

8

帖子

0

精华

新手上路

积分
36
金钱
36
注册时间
2015-5-6
在线时间
0 小时
 楼主| 发表于 2015-5-13 20:04:42 | 显示全部楼层
回复【2楼】styleno1:
---------------------------------
我也使用过==来判断大小,我还想了很多种办法,都是没有办法解决即使数值上weidu==weidu1,但是32的判断还是weidu>weidu1
回复

使用道具 举报

11

主题

64

帖子

0

精华

初级会员

Rank: 2

积分
90
金钱
90
注册时间
2014-8-4
在线时间
14 小时
发表于 2015-5-13 21:11:33 | 显示全部楼层
回复【5楼】2947016434:
--------------------------------
转换成字符串以后再比较相等不可以吗
生命不息,学习不止
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-22 13:50

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表