非驰 发表于 2020-3-18 22:19:10

为什么四舍五入取整,用double没问题,用float就不行呢

声明float,打印出来就不是整数,用double就能
不太明白,请大神通俗点告诉我,感谢

#include <stdio.h>
main()
{
        float km,n1,n2,n;
        int time;
        scanf("%lf %d",&km,&time);
       
        if (km<=3){
                n1 = 10;
        }
        else if (km<=10){
                n1 = 10 + (km - 3)*2.0;
        }
        else{
                n1 = 10 + (km - 3)*2.0+(km - 10)*3.0;
        }
        n2 = time/5*2;
        n = n1 + n2;
        printf("%.0f",n);
       
       
       
       
       

        return 0;
}

非驰 发表于 2020-3-18 22:20:08

二楼是题目

本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:

起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
输入格式:
输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。

输出格式:
在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元。

输入样例1:
2.6 2

      
   
输出样例1:
10

      
   
输入样例2:
5.1 4

      
   
输出样例2:
14

      
   
输入样例3:
12.5 9

      
   
输出样例3:
34

大肥侃子 发表于 2020-3-18 23:12:10

scanf() 函数里面你用了 %lf 来输入一个声明的 float 类型,在这里出错
然后第16行的计算,是 (10 - 3)

拖延症大叔 发表于 2020-3-18 23:23:01

20行你这%.0f不和%d一样了嘛。。。{:10_333:}

printf("%.0f",n);

小笨笨难得糊涂 发表于 2020-3-19 01:33:20

两个问题
1.第7行%lf是double类型,float类型用%f
2.第16行, n1 = 10 + (km - 3)*2.0+(km - 10)*3.0;已经超过10KM了, 3到10公里这部分价钱是7*2=14元,
这部分要改成 n1 = 10 + 14+(km - 10)*3.0;
代码附后:

#include <stdio.h>
main()
{
      float km,n1,n2,n;
      int time;
      scanf("%f %d",&km,&time);
      
      if (km<=3){
                n1 = 10;
      }
      else if (km<=10){
                n1 = 10 + (km - 3)*2.0;
      }
      else{
                n1 = 10 + 14+(km - 10)*3.0;
      }
      n2 = time/5*2;
      n = n1 + n2;
      printf("%.0f",n);
      return 0;
}

非驰 发表于 2020-3-19 19:14:32

小笨笨难得糊涂 发表于 2020-3-19 01:33
两个问题
1.第7行%lf是double类型,float类型用%f
2.第16行, n1 = 10 + (km - 3)*2.0+(km - 10)*3.0;已 ...

懂了,thanks
页: [1]
查看完整版本: 为什么四舍五入取整,用double没问题,用float就不行呢