c语言精确小数位数会怎样舍去后面的小数

代码

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

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-10-26

你好!!

    

int main()
{
float a = 3.155;                    //保留到小数点后两位
float b =(int)((a*100)+0.5)/100.0; //四舍五入的运算 
printf("原来的小数:%.3f \n四舍五入后:%.2f\n",a,b);//输出结果 
    return 0;
}

本回答被网友采纳
第2个回答  2013-10-24
//可以用以下代码进行测试:
#include <stdio.h>

int main()
{
printf("%.2f\n", 3.141592653);
printf("%.3f\n", 3.141592653);
printf("%.4f\n", 3.141592653);
printf("%.5f\n", 3.141592653);
printf("%.6f\n", 3.141592653);
printf("%.7f\n", 3.141592653);
printf("%.8f\n", 3.141592653);
return 0;
}

结果表明:到预设精度处会进行四舍五入

追问

可能我说的还不够明白,3.155会显示3.15,说明精确时不是按照四舍五入来的,我想问的是,为何会显示这样的结果,编译器遵循怎样的规则

追答

出现这种情况的原因是——浮点数也采用二进制编码,输出时要转为十进制,具体你可以查浮点数编码规范IEEE754

第3个回答  推荐于2017-10-06

C语言用%m.nf输出浮点数时,会从n+1位小数位进行四舍五入。

如:

printf("%5.2f\n", 3.567 ); //输出 3.57,前面有一个空格,补齐五个字符宽度。

但,由于浮点数是不精确的数据,与实际准确数是有误差的,四舍五入也会出现差异,如:

float f=3.155;
printf("%f\n", f ); //默认小数位6位,第七位四舍五入:3.155000
printf("%.10f\n", f ); //输出:3.1549999714
//参考以上代码说明,理解以下输出
printf("%.2f\n", f ); //3.15
printf("%.3f\n", f ); //3.155

相似回答