在某一天的刷题中,偶然写道了这道题
写完以后发现没有满分,由此引发了猜想,对于编译器运行时使用
printf("%.1f",3.155);
其它本身就会进行四舍五入所以会出现以下运行结果
但如果我们保留两位小数呢?
啊,不该是输出3.16么?为什么是3.15呢?
我们带着疑问对a进行监视
原来如此,a在存储时不是存的3.155,而是3.15499997,那么自然保留两位小数就是3.15了嘛;
为什么会有误差呢?
原因如下
回归本题(链接:学生基本信息输入输出_牛客题霸_牛客网 (nowcoder.com))
那么保留两位小数,我们直接在加0.005就可以了嘛
#include <stdio.h>
int main()
{
unsigned long long int p;
double a, b, c;
scanf("%llu;%lf,%lf,%lf", &p, &a, &b, &c);
if(a!=0)
a = a + 0.0005;
if(b!=0)
b = b + 0.0005;
if(c!=0)
c = c + 0.0005;
printf("The each subject score of No. %llu is %.2lf, %.2lf, %.2lf.", p, a, b, c);
return 0;
}