今天牛客网上刷题,有个四舍五入的题,首先想到的就是把变量 + 0.5 后利用c语言的 / 整除实现四舍五入,
#include<stdio.h>
int main()
{
float a = 0;
float b = a + 0.5;
scanf("%f", &a);
printf("%d", b / 1);
return 0;
}
不过代码敲上去后发现被除数是浮点数,或者输出结果必须是浮点数,这还需要处理,暂时没想到办法,突发奇想用 "%.0f" 来限制输出的小数位数,
#include<stdio.h>
int main()
{
float a = 0;
while(scanf("%f", &a) != EOF)
printf("%.0f\n", a / 1);
return 0;
}
神奇的事情发生了,代码直接自带四舍五入(上面代码 a / 1 只写 a 也行)
https://blog.csdn.net/weixin_38505045/article/details/79994536#
这是他人 “+ 0.5 后利用c语言的 / 整除实现四舍五入” 的思路的解决方案
这是 %0.f 自动四舍五入的原因:
“%.0f 是输出 float 型或 double 型数据,按定点格式,小数点以下占0位。
也就是输出浮点数的整数部分,不输出小数点和小数点以下部分。小数部分 4 舍 5 入。
例如:
printf("%.0f %.0f ",123.5,123.4);
输出 124 123”
原因来源:https://blog.csdn.net/baiquanjiangyou/article/details/103204451#
更新于2023/10/21
某天又遇见一个需要将浮点数四舍五入的题,不过这次不能直接输出所以需要另寻方法。
直接使用强制转换:
假设 float a = 1.4 ,float b = 1.6,,float c = 2.0;
使用 int A = (int) (a + 0.5) , int B = (int) (b + 0.5) , int C = (int) (c + 0.5);
就可以实现四舍五入使得 A = 1 ,B = 2 ,C = 2
原理是浮点数强制转换为整型数时会省略掉小数点后面的数而取整
这是知识来源https://blog.csdn.net/qq_39200110/article/details/103661549
其中还包含 int 转换为 float 会发生舍入的情况
与 double 转换为 float 会发生溢出与舍入的情况