玄学问题

题面传送门

不知道为啥取两位小数的时候我的代码运行出来会四舍五入
而题解代码不会

我的代码

#include <stdio.h>
int main(void)
{
	FILE *fp = fopen("data.txt","r");
	int i;
	double boundaries[] = {0, 1e5, 2e5, 4e5, 6e5, 1e6};
	double part[] = {0.1, 0.075, 0.05, 0.03, 0.015, 0.01};
	double in, ans = 0;
	fscanf(fp, "%lf", &in);
	for(i=5; i>=0; --i)
		if(in > boundaries[i])
		{
			ans = ans + part[i]*(in - boundaries[i]);
			in = boundaries[i];
		}
	fp = fopen("my.txt", "w");
	fprintf(fp, "%.2f", ans);
	return 0;
}

题解代码

#include "stdio.h"
int main()
{
	FILE *fp = fopen("data.txt", "r");
    double a,b;
    fscanf(fp, "%lf",&a);
    if(a<=100000)
    b=a*0.1;
    else if(100000<a && a<=200000)
    b=100000*0.1+(a-100000)*0.075;
        else if(200000<a  &&  a<=400000)
        b=100000*0.175 + (a-200000)*0.05;
            else if(400000<a  &&  a<=600000)
            b=100000*0.175 +200000*0.05 + (a-400000)*0.03;
                else if(600000<a  &&  a<=1000000)
                b=100000*0.175 + 200000*0.05 + 200000*0.03 + (a-600000)*0.015;
                    else if(a>1000000)
                    b=100000*0.175 + 200000*0.05 + 200000*0.03 + 400000*0.015 + (a-1000000)*0.01;
	fp = fopen("test.txt", "w");
    fprintf(fp, "%.2lf\n",b);
    return 0;
} 

数据生成器

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
	FILE *fp = fopen("data.txt", "w");
	srand(time(NULL));
	fprintf(fp, "%d", 100000+rand());
	return 0;
}

会出现差异的数据
输入:131989
我的输出:12399.18
题解输出:12399.17

经修改发现,如果取六位小数那么输出均为12399.175000

我直接裂开
希望各路网友帮忙指出错误,或者可能出现错误的地方

posted @ 2020-12-09 20:01  快乐永恒  阅读(138)  评论(0编辑  收藏  举报