float与long的赋值转换
来源:4-4 编程练习
变强还不秃
2021-08-19 18:30:47
请问怎么才能将这个f的值重新赋值给l呢?
请老师解答。
3回答
好帮手慕小脸
2021-08-19
同学你好,将大类型的赋值给小类型时需要强制类型转换。l为long类,f为float类型,float类型数据范围大于long类型数据范围,所以将float类型数据赋值给long类型时需要强制类型转换。即:
祝学习愉快~
albert_aGHTZ7
2022-01-14
l=(long)f; //因为变量f属于单精度类型字面值,根据数据转换原则,单精度型转换为长整形,需要强制转换。
爱问问题的小菜鸡
2022-01-13
long a = 100l; float f = a;
以上代码:是正确的,long类型的变量a 自动转换成了 float类型了。
当下由我来跟你解释是为什么?你也知道,数据类型之间的转换有个级别高低问题,这里,我就在讲一下:
(1)类型级别高的数据赋值给类型级别低的变量时,会丢失精度(还有可能会报错);
(2)类型级别低的数据赋值给类型级别高的变量时,会有个类型自动升级的过程(隐式
的,由系统自动完成)。
这里,虽然long型的级别要比float级别低,有个自动类型转换过程,
那为什么程序能通过且没有出错呢?
原因就在于:long数据过小。
虽然long型占8个字节,float占4个字节,但是float数据,除了能表示小数,还能表示指数。
float型数据表示的范围就远远大于long型数据了。
那么这里,有没有损失精度呢,可以明明白白的告诉你,绝对损失精度了,
但这个精度不过是100的二进制表示的最前面的那一串无伤大雅的“0”,
存进float型空间时,结果任然没有变。
但是,如果long型数据很大很大,那就很有可能会真正损失精度了,
表示的结果会完全不是我们预期的那样了,
相似问题