#include <stdio.h>float time(int x){ if(x>=23||x>=0&&x<=5) { float a=1.2; return a; } else { int b=1; return b; }}float kilometre(float y){ int begin=13; if(y>3) { float c=(y-3)*2.3+begin+1; return c; } else { int d=begin+1; return d; }}int main(){ float a,b,c,d; a=9; b=12; c=6; d=12; float e=time(a)*kilometre(b)+time(c)*kilometre(d); printf("小明每天打车的总费用是%f\n",e); return 0;}
2 回答
傻圆傻圆
TA贡献14条经验 获得超23个赞
在计算机存储数字的时候是使用的是二进制的形式,存储整数一般不会有误差,但是在存储小数的时候就会出现误差了,对于float类型来说,它的精度并不是很高,在你的程序中你使用到了2.3这个float类型的数字,你可以试着看一下这行语句的打印结果printf("%.10f", (float)2.3),会发现打印的结果并不是预期中的2.3000000000这个数字,而是一个稍微小上一丢丢的数字。如果使用double类型的话会更好,因为double类型的精度更高,试着看一下这行语句的打印结果printf("%.10lf", (double)2.3),会发现是预想中的结果2.3000000000,但实际上如果输出位数在多一些的话,也会看出来一些误差。
总的来说,就是在计算机进行浮点数的运算时,会涉及到一个精度问题,而你的代码之所以会打印出来的结果和预期不同,就是因为运算时的误差,如果想要深入的了解,建议看一下关于计算机中数字的存储以及计算相关知识。
- 2 回答
- 0 关注
- 1443 浏览
添加回答
举报
0/150
提交
取消