猿问

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

#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;

}


qq_林英东_0
浏览 1444回答 2
2回答

傻圆傻圆

    在计算机存储数字的时候是使用的是二进制的形式,存储整数一般不会有误差,但是在存储小数的时候就会出现误差了,对于float类型来说,它的精度并不是很高,在你的程序中你使用到了2.3这个float类型的数字,你可以试着看一下这行语句的打印结果printf("%.10f", (float)2.3),会发现打印的结果并不是预期中的2.3000000000这个数字,而是一个稍微小上一丢丢的数字。如果使用double类型的话会更好,因为double类型的精度更高,试着看一下这行语句的打印结果printf("%.10lf", (double)2.3),会发现是预想中的结果2.3000000000,但实际上如果输出位数在多一些的话,也会看出来一些误差。    总的来说,就是在计算机进行浮点数的运算时,会涉及到一个精度问题,而你的代码之所以会打印出来的结果和预期不同,就是因为运算时的误差,如果想要深入的了解,建议看一下关于计算机中数字的存储以及计算相关知识。
随时随地看视频慕课网APP
我要回答