C/C++浮点数取舍问题

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);
发布了231 篇原创文章 · 获赞 17 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/c___c18/article/details/104276879