C 语言 保留 2 位小数并且四舍五入输出
方法① printf 直接格式化(最简单!刷题最常用✅)
printf("%.2f", x);
printf 的
%.2f默认自带四舍五入!不需要 round,不需要 + 0.5
#include <stdio.h>
int main()
{
double x = 80.845;
printf("%.2f", x);
return 0;
}
输出:80.85,自动四舍五入保留 2 位小数。
示例:
90.55→90.55100.0→100.002.344→2.342.345→2.35
💡重点:只是输出的时候四舍五入,变量 x 内存里原始值没有改变!只是打印效果。
方法②:如果你想把变量本身的值真正变成四舍五入后两位小数(改变内存里面的数据)
公式:x = round(x * 100) / 100.0;
乘以 100 四舍五入成整数,再除以 100,得到保留两位小数的 double 值 需要头文件
#include <math.h>
#include <stdio.h>
#include <math.h>
int main()
{
double x = 80.845;
x = round(x * 100) / 100.0;
printf("%.2f", x);
return 0;
}
此时 x 变量本身就是 80.85,不是 80.845。
刷题 OJ 绝大多数场景,只用方法① printf ("%.2f") 就足够,不用修改变量本身。
回到刚才那道牛客题完整正确代码
#include <stdio.h>
int main()
{
int i;
double a, b, c;
scanf("%d %lf %lf %lf", &i, &a, &b, &c);
// %.2f 自动四舍五入保留两位小数
printf("The each subject score of No. %d is %.2f, %.2f, %.2f.", i, a, b, c);
return 0;
}
输入:17140216 80.845 90.55 100.00 输出:The each subject score of No. 17140216 is 80.85, 90.55, 100.00.
格式速记表
表格
| 写法 | 效果 | 四舍五入 |
|---|---|---|
%f |
原样输出 double,6 位小数 | 是 |
%.2f |
保留 2 位小数输出 | ✅自动四舍五入(刷题首选) |
%.1f |
保留 1 位小数输出 | ✅自动四舍五入 |
%.0f |
保留 0 位小数(输出整数) | ✅自动四舍五入 |
⚠️易错区分
(int)x:强制转换,直接截断丢掉小数,不会四舍五入 !(int)80.845→得到80。不要和%.0f搞混。%.2f只是打印外观变化,原始变量值不变。round(x*100)/100.0才会真正修改变量存储的数值。
绝大多数 OJ 题目,只要求输出结果,直接用 printf 格式化即可,不要去改动原始变量。