float double 存储问题

超gogo 2009-06-09 10:14:50
我在窗口输入一个float数,或者double数,然后想得到其小数

程序大致如下:
double m;
cin>>m;
int k=(int)m;//得到浮点数的整数部分
double a=m-k;

int f=((int)(a*10))%10 这个得到小数点后的第一位


但是得到的结果总是小一点,真的是一点点

例如:输入3.3 我通过调试查看,保存入m中的值不是3.3 而是3.2999999999999998

但是如果用cout语句输出m则为3.3,在程序中的应用都是错误的值,都是对上面3.299999999999999998的运算

我需要在程序中应用m值,但是应用的值却不正确。

请各位朋友帮忙解惑,同时也可以提出得到各个小数位的值的方法 谢谢
...全文
92 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
concision 2009-06-22
  • 打赏
  • 举报
回复
浮点数存储本来就有误差
超gogo 2009-06-22
  • 打赏
  • 举报
回复
好的 谢谢各位的回答
jackzhhuang 2009-06-16
  • 打赏
  • 举报
回复
这个要想精确的话,我觉得最简单的就是让用户输入字符串而不是float或者double,然后分析字符串得到小数部分。不然,很难做到太精确。
T技术沙龙 2009-06-16
  • 打赏
  • 举报
回复
楼主是要进行非常精确的计算么?个人觉得楼主所提供的误差要是不是对精度要求高到一定的程度的话是可以接受的,而且对计算应该也没有太大的影响吧
findcsdn 2009-06-16
  • 打赏
  • 举报
回复
很简单的问题啊

可以用字符串存储浮点数。
也可以将输入的数加上一个极小的数比如0.00000000000001 这个对程序影响不大,但是可以保证数据正确。


cxxstudy 2009-06-16
  • 打赏
  • 举报
回复
13楼推荐的文章不错,学习了
风老二 2009-06-16
  • 打赏
  • 举报
回复
昨天在vb版里刚见讨论过,自已还找了一个精度相关的文章,你也可以看下
http://www.cnblogs.com/bossin/archive/2007/04/08/704567.html
子瓜个个 2009-06-16
  • 打赏
  • 举报
回复
计算机中存储的本来就是有误差的。
red_berries 2009-06-16
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wangtengchao 的回复:]
感谢楼上的回答
那么如何能得出各个小数位的小数的值呢??
[/Quote]

double d = 3.3;
char szBuffer[32];
sprintf( szBuffer, "%f", d);
printf("%s\n",szBuffer);

后面小数部分的值自己解析字符串就可以了
tkminigame 2009-06-16
  • 打赏
  • 举报
回复
当一个数能够无限逼近这个数的时候,它就等于这个数,所以不必担心这个数是不是2.9999999还是3。两个数都是3。
  • 打赏
  • 举报
回复
不懂 学习一下
pengzhixi 2009-06-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 lingyin55 的回复:]
先把浮点数转换成字符串,然后再从字符串里取出。不知道可行否。。


引用 2 楼 wangtengchao 的回复:
感谢楼上的回答
那么如何能得出各个小数位的小数的值呢??
[/Quote]

哥们的意思是这样么:
double d=3.0;
char s[sizeof(double)];
memcpy(ch,&d,sizeof(ch));
这样么?
Sou2012 2009-06-10
  • 打赏
  • 举报
回复
浮点数只是无限接近。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
超gogo 2009-06-10
  • 打赏
  • 举报
回复
请大家继续回答 谢谢
liao05050075 2009-06-09
  • 打赏
  • 举报
回复
先把浮点数转换成字符串,然后再从字符串里取出。不知道可行否。。
这个应该不行的。因为浮点数转换成字符串之前已经有了误差。

事实上,这一点点误差不能算做错误。如果你的计算要求不是很高的话,一般是没什么太大影响了。

如果你一定要求精确,那么你只能使用高精度了。你可以搜索一下高精度小数的相关内容
超gogo 2009-06-09
  • 打赏
  • 举报
回复
大家能具体点吗??谢谢
lingyin55 2009-06-09
  • 打赏
  • 举报
回复
先把浮点数转换成字符串,然后再从字符串里取出。不知道可行否。。

[Quote=引用 2 楼 wangtengchao 的回复:]
感谢楼上的回答
那么如何能得出各个小数位的小数的值呢??
[/Quote]
超gogo 2009-06-09
  • 打赏
  • 举报
回复
感谢楼上的回答
那么如何能得出各个小数位的小数的值呢??
liao05050075 2009-06-09
  • 打赏
  • 举报
回复
呵呵。老问题了。
浮点数在计算机在的表示是有误差的,无法做到完全精确。
所以比较浮点数的相等通常是不能直接用==来做的,
而是要用一个很小的值来和它们的差比较
比较方法如下:if(fabs(a-b)<1e-6)//那么就可以认为浮点数a,b相等

具体的浮点数的表示方法你去搜索一下,看看就知道了。

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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