问答详情
源自:5-14 综合练习

用 double 类型计算最后结果为什么会有一点差距

double  money(int s,int t)
{
   double   M=13;
     M+=1;
    if (s<3)
    {return M;}
    double  permile=2.3;
    
    if(t>=23||t<5)
    {
         permile*=1.2;
    }
    M+=(s-3)*permile;
    return M;
}
int main()
{
    double  cost=money(12,9)+money(12,18);
    
    printf("小明每天的打车费为%f\n",cost);
    return 0;
}


提问者:慕斯7371441 2019-10-14 01:23
微课

个回答

  • Allen51
    2019-11-04 21:28:30

    因为double类型是以二进制形式储存的, 转换成十进制时只能做近似的转换,即使是一个确定值,他在做转换的时候也可能产生误差,因为并不是每一个十进制的小数都能用二进制表示。例如0.3你就无法用一个二进制数表示出来。

    对于此问题,最好的办法是:由于已知人民币一般用元角分计算,便限制只输出两位小数,用%.2f