代码
main()
{
printf("\n%.2f",3.155);
}
结果显示 3.15,
将3.155换成3.156
结果显示3.16
以上说明舍去后面的小数时既不是直接舍弃,又不是四舍五入,(我们老师也说过,精确位数并不会改变本身的值)那它是如何得到这个结果的?
1、正数x四舍五入的技巧:
doublex;
x=(int)(x+0.5);
2、举例:若正数要依舍去法精确到小数点後第二位;
例如6.2367–>(int)(623.67)/100.0=623/100.0=6.23
doublex;
x=(int)(x*100)/100.0;//注意是除以100.0;
3、举例:若正数要四舍五入精确到小数点後第二位,即x*100四舍五入再除以100;
x=(int)(x*100+0.5)/100.0;
扩展资料
C语言保留小数点后一位
例:
#include<stdio.h>
voidmain()
{
floata=1,b=2,c;//先定义一个实型数据
c=a/b;
printf("%.1f\n",c);//重点在于%.1f
}
结果表明:到预设精度处会进行四舍五入
可能我说的还不够明白,3.155会显示3.15,说明精确时不是按照四舍五入来的,我想问的是,为何会显示这样的结果,编译器遵循怎样的规则
追答出现这种情况的原因是——浮点数也采用二进制编码,输出时要转为十进制,具体你可以查浮点数编码规范IEEE754
C语言用%m.nf输出浮点数时,会从n+1位小数位进行四舍五入。
如:
printf("%5.2f\n", 3.567 ); //输出 3.57,前面有一个空格,补齐五个字符宽度。但,由于浮点数是不精确的数据,与实际准确数是有误差的,四舍五入也会出现差异,如:
float f=3.155;