C++ 求float类型数据小数部分

如floatnum=299.1这样算下来,小数部分应该为0.1事实上,299.1-299=0.100006.等高手解决问题我只是举个例子,我想说的是任意float类型数据... 如 float num = 299.1
这样算下来,小数部分应该为0.1
事实上,299.1 - 299 =0.100006.
等高手解决问题
我只是举个例子,我想说的是任意float类型数据的小数部分,而且这个数据小数位数也是可变的,并不固定
展开
 我来答
微微一笑成路人eY
2009-11-03 · TA获得超过1187个赞
知道小有建树答主
回答量:517
采纳率:100%
帮助的人:878万
展开全部
数字在计算机内以二进制存储 ,只能表示一些离散的点 ,实数是连续的 ,计算机自动取最接近的那个点来表示某个实数。
比如说想要把 299.1 化为二进制 ,299 为 1 0010 1011
而小数部分 .1 化为 0.00011001100110011 …… ,无法有准确的二进制表示。
故 299.1 二进制为 1 0010 1011.00011001100110011…… ,也没有准确表示,按照 IEEE 标准 ,单精度浮点数有 32 位 ,其中尾数部分 23位 ,故 299.1在计算机内表示为 0 10000111 0010101100011001100110_ ,这最后一位是啥就看进位是怎么选择的了 ,这个数再解释回来就不是原来的 299.1 了。
这只是个原理 ,上面的数我没有仔细算,楼主感兴趣的话可以查阅相关标准。
aund1986
2009-11-03 · TA获得超过1618个赞
知道小有建树答主
回答量:1000
采纳率:0%
帮助的人:530万
展开全部
如果是想打印出0.1的话,用下面的方法可以小数点后保留一位
printf("%.1f\n",299.1-299);
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式