为什么C程序的结果会是这样的?

floatx=67.8564,y=-789.124;printf("%-10f\n",y);printf("%3f,%3f\n",x,y);然后运行后的结果如图:为什么会... float x=67.8564,y=-789.124;
printf("%-10f\n",y);
printf("%3f,%3f\n",x,y);

然后运行后的结果如图:

为什么会是这样的呢?
-789.124023 后面小数023哪来的?默认6位小数不应该是000么?
明明已经指定了域宽为10,为何结果出现了11位域宽,难道必须先满足小数默认输出6位?
第二个printf()函数的输出更离谱了,只有三位域宽 ,为何数值完整输出了?

请高人解答!谢谢!
展开
 我来答
匿名用户
2014-09-17
展开全部
对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位,超过了的就会出错,补0的情况是不满7位的情况下,10f的用法是错误的,精确小数多少位是.10 ,精确小数三位是.3,小数点不能丢的。
kaixingui2012
推荐于2016-01-02 · TA获得超过4.2万个赞
知道大有可为答主
回答量:1.4万
采纳率:81%
帮助的人:6435万
展开全部
一、-789.124023 后面小数023哪来的?默认6位小数不应该是000么?
计算机中的浮点数一般都是不精确的数,是个近似数,所以,输出的时候,小数位数多时,其显示与我们理想中的数不是很相同,你换成double会好一些。

二、明明已经指定了域宽为10,为何结果出现了11位域宽,难道必须先满足小数默认输出6位?
是的

三、第二个printf()函数的输出更离谱了,只有三位域宽 ,为何数值完整输出了?
当实际数的宽度超过设置的域宽时,按实际数长度输出
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lygszmjj
2014-09-17 · TA获得超过1814个赞
知道小有建树答主
回答量:1192
采纳率:0%
帮助的人:422万
展开全部
-789.124023 后面小数023哪来的?
这是由于二进制十进制转换所造成的误差。所以说x==y这样的条件对浮点数是不合适的。

其他情况都是因为指定的域宽小于实际数值输出精度需要时,为避免输出错误,系统会自动补齐。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式