Q:
突然发现一个问题就是,在小数进行取舍的时候,出现了一个问题
double a=5,b=10;
printf("%.f\n",a/b);
上面的代码运行的结果竟然是 :0
不是四舍五入的吗*&…¥%¥%……¥……&…%¥%%#@#@!%¥#%¥##@#%¥#%%&……
好吧,才疏学浅啊
C语言其实是严格的四舍五入的,但是,是根据情况而定的(原来还有口诀QAQ)。
A:
四舍六入五成双
这句话是什么意思呢
1.四舍肯定就是小于4的舍去,六入是指大于6的进一位,这是肯定的
2.五成双的还要分情况来讨论
2.1.当5后面没有数值的时候就看5前面的数是奇数还是偶数,如果是奇数就进一位,如果是偶数就舍去(0也是偶数),举个栗子:
printf("%.2f\n",9.8050);
运算的结果是9.80,因为5前面是偶数。
printf("%.2f\n",9.8350);
运算的结果是9.80,因为5前面是奇数。
2.2 当5后面有数的时候,无论前面是奇数还是偶数,都进一位
printf("%.2f\n",9.8354);
printf("%.2f\n",9.80501);
这两个数的结果分别是9.84和9.81
扫描二维码关注公众号,回复:
9124819 查看本文章
PS:其实我感觉五成双的叫法怪怪的,但大家都那么叫
其实在实际运用的时候可以用下面的方法来控制
//实现小数点后三位的四舍五入
double a;
scanf("%lf", &a);
a = (int)(a*1000+0.5)/1000.0;
printf("%0.3f\n", a);