标题:关于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
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册: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
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册: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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-492340-1-1.html




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

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