为什么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()函数的输出更离谱了,只有三位域宽 ,为何数值完整输出了?
请高人解答!谢谢! 展开
printf("%-10f\n",y);
printf("%3f,%3f\n",x,y);
然后运行后的结果如图:
为什么会是这样的呢?
-789.124023 后面小数023哪来的?默认6位小数不应该是000么?
明明已经指定了域宽为10,为何结果出现了11位域宽,难道必须先满足小数默认输出6位?
第二个printf()函数的输出更离谱了,只有三位域宽 ,为何数值完整输出了?
请高人解答!谢谢! 展开
3个回答
2014-09-17
展开全部
对于单精度数,使用%f格式符输出时,仅前7位是有效数字,小数6位,超过了的就会出错,补0的情况是不满7位的情况下,10f的用法是错误的,精确小数多少位是.10 ,精确小数三位是.3,小数点不能丢的。
展开全部
一、-789.124023 后面小数023哪来的?默认6位小数不应该是000么?
计算机中的浮点数一般都是不精确的数,是个近似数,所以,输出的时候,小数位数多时,其显示与我们理想中的数不是很相同,你换成double会好一些。
二、明明已经指定了域宽为10,为何结果出现了11位域宽,难道必须先满足小数默认输出6位?
是的
三、第二个printf()函数的输出更离谱了,只有三位域宽 ,为何数值完整输出了?
当实际数的宽度超过设置的域宽时,按实际数长度输出
计算机中的浮点数一般都是不精确的数,是个近似数,所以,输出的时候,小数位数多时,其显示与我们理想中的数不是很相同,你换成double会好一些。
二、明明已经指定了域宽为10,为何结果出现了11位域宽,难道必须先满足小数默认输出6位?
是的
三、第二个printf()函数的输出更离谱了,只有三位域宽 ,为何数值完整输出了?
当实际数的宽度超过设置的域宽时,按实际数长度输出
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
-789.124023 后面小数023哪来的?
这是由于二进制十进制转换所造成的误差。所以说x==y这样的条件对浮点数是不合适的。
其他情况都是因为指定的域宽小于实际数值输出精度需要时,为避免输出错误,系统会自动补齐。
这是由于二进制十进制转换所造成的误差。所以说x==y这样的条件对浮点数是不合适的。
其他情况都是因为指定的域宽小于实际数值输出精度需要时,为避免输出错误,系统会自动补齐。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询