鱼C论坛

 找回密码
 立即注册
查看: 1183|回复: 5

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

[复制链接]
发表于 2020-3-18 22:19:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

  1. #include <stdio.h>
  2. main()
  3. {
  4.         float km,n1,n2,n;
  5.         int time;
  6.         scanf("%lf %d",&km,&time);
  7.        
  8.         if (km<=3){
  9.                 n1 = 10;
  10.         }
  11.         else if (km<=10){
  12.                 n1 = 10 + (km - 3)*2.0;
  13.         }
  14.         else{
  15.                 n1 = 10 + (km - 3)*2.0+(km - 10)*3.0;
  16.         }
  17.         n2 = time/5*2;
  18.         n = n1 + n2;
  19.         printf("%.0f",n);
  20.        
  21.        
  22.        
  23.        
  24.        

  25.         return 0;
  26. }
复制代码
最佳答案
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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 23:12:10 | 显示全部楼层
scanf() 函数里面你用了 %lf 来输入一个声明的 float 类型,在这里出错
然后第16行的计算,是 (10 - 3)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-18 23:23:01 | 显示全部楼层
20行你这%.0f不和%d一样了嘛。。。

  1. printf("%.0f",n);
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-23 12:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表