|
2鱼币
在做小甲鱼第一季的课后练习(S1E9)的动动手第一题,为什么我的按揭成数c除以10的时候是0.699999988呢,既不是0.7,就算是精度损失,那为什么又不是0.7000000001,也不是0.699999999,搞不懂那2个8怎么来的,因为这些我最后算出来的结果和答案不太一样(虽然差距很小但感觉不能随便忽略)。我用的Dev C++(5.11),不知哪里出了问题,想请大佬赐教。
调试图,C/10的值在左上角
- #include <stdio.h>
- #include <math.h>
- int main()
- {
- float d;
- float a,b,c,yir;
- printf("请输入单价(元/平方):");
- scanf("%f",&a) ;
- printf("请输入面积:");
- scanf("%f",&b) ;
- printf("请输入按揭成数:");
- scanf("%f",&c) ;
- printf("请输入按揭年数:");
- scanf("%f",&d) ;
- a=6000,b=120,c=7,d=20;
- printf("请输入当前基准年利率:");
- scanf("%f",&yir) ;
- // 开始计算结果
- printf("=======报告结果=======\n");
- float m=d*12;
- float r=yir/12;
- // 房款总额
- float total0=a*b;
- // 首期付款
- float first=total0*(1-c/10);
- // 贷款总额
- float p=total0*c/10;
- // 月均还款
- float x=p*(r/100*pow((1+r/100),m))/(pow((1+r/100),m)-1);
- // 还款总额
- float total=m*(float)x;
- // 支付利息
- float total_lx=m*(float)x-p;
- // 输出结果
- printf("m=%.2f\n",m);
- printf("房款总额;%.2f元\n",total0);
- printf("首期付款;%.2f元\n",first);
- printf("贷款总额;%.2f元\n",p);
- printf("还款总额;%.2f元\n",total);
- printf("支付利息;%.2f元\n",total_lx);
- printf("月均还款;%.2f元\n",x);
-
- return 0;
- }
复制代码
左(小甲鱼) 右(我的运行结果)
这个就是精度误差,误差成什么样不是你能控制的。
我手上没开vs,测试不了,你可以试试用 double 或 long double ,或许误差会变小?
|
最佳答案
查看完整内容
这个就是精度误差,误差成什么样不是你能控制的。
我手上没开vs,测试不了,你可以试试用 double 或 long double ,或许误差会变小?
|