请教一下有关C语言用(float)强制转换的用法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请教一下有关C语言用(float)强制转换的用法相关的知识,希望对你有一定的参考价值。

#include <stdio.h>
void main()

int number = 0;
float value = 2.5f;

number = (float)value; (想请教一下这里怎么用(float)强制转换另最后的结果是2.5而不是2)

printf("\nThe number is %d.",number);

如果都改成float类型相同就不需要强制转换了。我就是想了解一下怎么用(float)强制转换 不同类型的一定没办法强制转化么?我是新手还请多关照。

事实上你如果在printf里用%f输出浮点的话,默认的小数部分永远有6位,这只是输出小数的惯例罢了,根本没有深究的必要,如果你觉得一串0看起来不舒服,可以用%g或者%a.bf之类的格式控制小数显示的位数,如果希望依靠语言本身来确定计算是否精确,那么还是放弃这种想法吧。另外说一句,float(111)是c++才支持的格式,如果用的纯c还是用括号打在类型上的比较好。 参考技术A 你到底想干嘛?printf("%d")输出的永远是整数。

double number=2.5;
float value;
value=(float)number;
printf("%f\n",value);
强制转换要求与目标类型相同

不同类型之间可以强制转换,但可能有损失,比如
把float value=2.5,强制转换为int a=(int)value,就会损失小数部分。所以能不进行强制转换,就尽量不要用。本回答被提问者采纳
参考技术B number 是 int 型的,不能存贮 float 型,可以这样:
printf("\nThe number is %f.",value);
参考技术C 改成
float number = 0;
float value = 2.5f;
就可以了
参考技术D 最后的输出是怎么可能是2.5,当然是2啊

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语言用(float)强制转换的用法的主要内容,如果未能解决你的问题,请参考以下文章

C语言里面float数据用printf(“%d”)输出的问题

C语言强制类型转换

C语言中float型数据怎么 取整数部分算法 或取小数部分

c语言中 int(number) 的意义和作用(其中number为一个变量)。是类型转换?类型转换也可以是(int)number

请教delphi中有关case语句的用法

如何将INT转为FLOAT并用于浮点计算