#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,导致错误。