#include<stdio.h> int main() { int n = 0; double a = 0.00; double b = 0.00; double c = 0.00; scanf("%d;%lf,%lf,%lf", &n, &a, &b, &c); a = (int)(a * 100 + 0.5) / 100.0; // 确保精确四舍五入 printf("The each subject score of No. %d is %.2f, %.2f, %.2f.", n, a, b, c); return 0; }
四舍五入精度问题
·%.2f 会自动四舍五入到小数点后两位,但某些极端情况(如 3.145 可能被存储为 3.1449999... 导致四舍五入错误)。
·如果题目严格要求 “数学四舍五入”,可以手动调整:
a = (int)(a * 100 + 0.5) / 100.0; // 确保精确四舍五入
基础知识回顾:
输入问题(scanf 读取 double 必须用 %lf)
- 在
scanf
中: %f 用于 float , %lf 必须用于 double(否则读取错误)。
输出格式问题(%.2lf vs %.2f)
printf
中: %f 可以用于 float 和 double(C语言会自动提升 float 到 double)。%lf 在 printf 里 和 %f 完全等价(C99标准后),但某些旧的评测系统可能不支持 %lf,导致错误。