题解 | 学生基本信息输入输出
学生基本信息输入输出
https://www.nowcoder.com/practice/58b6a69b4bf943b49d2cd3c15770b9fd
#include<stdio.h>
int main() {
int i;
float a, b, c;
scanf("%d;%f,%f,%f", &i, &a, &b, &c);
// 添加微小偏移量确保四舍五入正确
printf("The each subject score of No. %d is %.2f, %.2f, %.2f.",
i, a + 0.00001, b + 0.00001, c + 0.00001);
return 0;
}
用float不加偏移量的话其中有个案例21.195会输出为21.19这是因为浮点数 21.195在计算机内部无法被精确表示为二进制浮点数,它实际上可能被存储为 21.194999...这样的值。当使用 %.2f格式化输出时,虽然会进行四舍五入,但由于内部存储的值略小于 21.195,导致舍入后变成 21.19而不是 21.20。
用double更精确虽然可以解决21.195这个案例,但后面还一个80.845会被识别为80.84与上面的例子应该是同样的问题,加上微小的偏移量就可以解决上述问题
