| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1072 人关注过本帖
标题:关于double精度的问题
只看楼主 加入收藏
木胖子
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2018-12-17
结帖率:100%
收藏
已结贴  问题点数:18 回复次数:3 
关于double精度的问题
本人写了一段程序,代码如下:
程序代码:
    double flag = 164432.33;
    int a=(long long)(flag*100)%10;
    printf("%f\n\n%d\n\n",flag,a);

简单得解释一下是,把浮点型数据flag,小数点后第二位数字提取出来,结果应该是3但是提取出来是2。
输入的结果是
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: double 精度 flag long 提取 
2018-12-28 11:49
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:13 
浮点数是以十进制格式存储的

double flag = 164432.33;
此时,flag 是 164432.32999999998719431459903717041015625

int a=(long long)(flag*100)%10;
其中,flag*100 是 16443232.99999999813735485076904296875
2018-12-28 11:58
木胖子
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2018-12-17
收藏
得分:0 
回复 2楼 rjsp
那请问,我有什么办法能解决这个问题吗?他只是有一些特殊数字会出现这个,对这个数字+1在其他情况下就不行了,很纠结
2018-12-28 12:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:0 
以下是引用木胖子在2018-12-28 12:05:59的发言:

那请问,我有什么办法能解决这个问题吗?他只是有一些特殊数字会出现这个,对这个数字+1在其他情况下就不行了,很纠结
看不懂你想干什么?
在CPU眼中,164432.33000000000 和 164432.32999999999 就是同一个值(正如你用毫米尺量 14mm多1纳米 和 14mm少1纳米 的两个物体,你会量出同样的值)
2018-12-28 15:15
快速回复:关于double精度的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.042958 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved