为了账号安全,请及时绑定邮箱和手机立即绑定

正常写完代码为什么结果是69.400002,这个2怎么来的

正常写完代码为什么结果是69.400002,这个2怎么来的

C
qq_林英东_0 2018-02-09 22:18:30
#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,但实际上如果输出位数在多一些的话,也会看出来一些误差。

    总的来说,就是在计算机进行浮点数的运算时,会涉及到一个精度问题,而你的代码之所以会打印出来的结果和预期不同,就是因为运算时的误差,如果想要深入的了解,建议看一下关于计算机中数字的存储以及计算相关知识。

查看完整回答
反对 回复 2018-02-09
  • 2 回答
  • 0 关注
  • 1430 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信