题解 | 学生基本信息输入输出

学生基本信息输入输出

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与上面的例子应该是同样的问题,加上微小的偏移量就可以解决上述问题

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务