c语言同一题目求解结果用float和int输出值差1.

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言同一题目求解结果用float和int输出值差1.相关的知识,希望对你有一定的参考价值。

题目描述
企业发放的奖金根据利润提成。利润低于或等于100000元的,奖金可提10%;
利润高于100000元,低于200000元(100000<I≤200000)时,低于100000元的部分按10%提成,高于100000元的部分,可提成 7.5%;
200000<I≤400000时,低于200000元部分仍按上述办法提成,(下同),高于200000元的部分按5%提成;
400000<I≤600000元时,高于400000元的部分按3%提成;
600000<I≤1000000时,高于600000元的部分按1.5%提成;
I>1000000时,超过1000000元的部分按1%提成。从键盘输入当月利润I,求应发奖金总数。

float输出:
#include <stdio.h>
main()

long i;
float j,j1,j2,j4,j6,j10;
j1=100000*0.1;
j2=j1+100000*0.075;
j4=j2+200000*0.05;
j6=j4+200000*0.03;
j10=j6+400000*0.015;
scanf("%ld",&i);
if(i<=100000)
j=i*0.1;
else if(i<=200000)
j=j1+(i-100000)*0.075;
else if(i<=400000)
j=j2+(i-200000)*0.05;
else if(i<=600000)
j=j4+(i-400000)*0.03;
else if(i<=1000000)
j=j6+(i-600000)*0.015;
else
j=j10+(i-1000000)*0.01;
printf("%f\n",j);

用int输出:
#include <stdio.h>
main()

long i,j;
float j1,j2,j4,j6,j10;
j1=100000*0.1;
j2=j1+100000*0.075;
j4=j2+200000*0.05;
j6=j4+200000*0.03;
j10=j6+400000*0.015;
scanf("%ld",&i);
if(i<=100000)
j=i*0.1;
else if(i<=200000)
j=j1+(i-100000)*0.075;
else if(i<=400000)
j=j2+(i-200000)*0.05;
else if(i<=600000)
j=j4+(i-400000)*0.03;
else if(i<=1000000)
j=j6+(i-600000)*0.015;
else
j=j10+(i-1000000)*0.01;
printf("%ld\n",j);

测试结果有差异,比如我输入20万,float输出17500.000000 long和int输出都是17499,差1是怎么回事呢?如果我想输出17500的整数,应该怎么改?

试试这样就好了
#include <stdio.h>
main()

long i;
float j,j1,j2,j4,j6,j10;
j1=100000*0.1;
j2=j1+100000*0.075;
j4=j2+200000*0.05;
j6=j4+200000*0.03;
j10=j6+400000*0.015;
scanf("%ld",&i);
if(i<=100000)
j=i*0.1;
else if(i<=200000)
j=j1+(i-100000)*0.075;
else if(i<=400000)
j=j2+(i-200000)*0.05;
else if(i<=600000)
j=j4+(i-400000)*0.03;
else if(i<=1000000)
j=j6+(i-600000)*0.015;
else
j=j10+(i-1000000)*0.01;
printf("%ld\n",long(j));


i根本不需要long型。用int就够了。
#include <stdio.h>
main()

int i;
float j,j1,j2,j4,j6,j10;
j1=100000*0.1;
j2=j1+100000*0.075;
j4=j2+200000*0.05;
j6=j4+200000*0.03;
j10=j6+400000*0.015;
scanf("%ld",&i);
if(i<=100000)
j=i*0.1;
else if(i<=200000)
j=j1+(i-100000)*0.075;
else if(i<=400000)
j=j2+(i-200000)*0.05;
else if(i<=600000)
j=j4+(i-400000)*0.03;
else if(i<=1000000)
j=j6+(i-600000)*0.015;
else
j=j10+(i-1000000)*0.01;
printf("%d\n",long(j));

输出结果正确。追问

哦,谢谢,这个是强制转换吗?

追答

恩,是的。

参考技术A float 是但精确度
double 是双精确度
int是整数
用float 和double 的时候输出的时候最好加上小数点像是
printf("%lf.2",a);
就精确到了2 位小数。。
float输出17500.000000 这是电脑默认的
如果我想输出17500的整数。。。。。这是你的公式计算吧,跟你用的float 和int 无关。。。追问

但用int输出时是17499,差1怎么回事?

追答

我运行了下第二个是17500啊。。

追问

我用c-free5运行就这样啊

追答

我的正常啊。。。CFREE3.5的

追问

奇怪,,,不过谢谢你哦

参考技术B 这不是树上的例题吗?追问

嗯,但是我们老师要求输出整数啊,不要留小数点,我我用整数输出的值要差1.

在C语言中Int和double怎么转换?

1、打开vc软件,新建一个空白的vc项目文件:

2、编写转换程序,首先添加头文件,在main主函数中定义int类型变量sum,count,再定义double类型变量todouble,并进行强制类型转换,强制转换的格式就是括号加要转换的类型,最后使用printf打印结果:

3、编译运行程序,查看转换的结果。以上就是C语言中Int和double转换的操作步骤:

参考技术A 使用强制类型转换,就是要转换的类型,加个括号。
int iA;
double dA;

iA=1234;
dA=(double)iA;
//这样dA就等于1234.00

dA=12.34567;
iA=(int)dA;
//这样iA就等于12,问题是这种转换会损失精度,小数部分被截取还可以接受,如果double超出了int的最大值,高出部分的位数也会被截掉,那就是灾难性的了,所以一般不做这种转换,除非你对待转换的数据大小心中有数。本回答被提问者和网友采纳
参考技术B int转换double.直接可以用double变量=int变量
double转换为int,使用取整函数则比较安全可靠
参考技术C #include"stdlio"
#include"stdlib"
int main()
int d;
double b;
scanf("%d",&b);
d=(int)b;//注意这里 double 变int
printf("%d",d);
return 0;

printf("%d",d);
参考技术D (目标类型)(被转的表达式)

以上是关于c语言同一题目求解结果用float和int输出值差1.的主要内容,如果未能解决你的问题,请参考以下文章

C语言初级问题求解=。= 为什么我的这段程序用int %d可以算 但是用float %f却运行不了呢?

在C语言中Int和double怎么转换?

两道c语言题目求解

关于C语言参数化宏的问题?

高分悬赏 求解2道MATLAB编程题目

c程序long转int输出问题求解