float与long的赋值转换

来源:4-4 编程练习

变强还不秃

2021-08-19 18:30:47

请问怎么才能将这个f的值重新赋值给l呢?

http://img.mukewang.com/climg/611e325a099c2d0c18070658.jpg

请老师解答。

写回答

3回答

好帮手慕小脸

2021-08-19

同学你好,将大类型的赋值给小类型时需要强制类型转换。l为long类,f为float类型,float类型数据范围大于long类型数据范围,所以将float类型数据赋值给long类型时需要强制类型转换。即:

http://img.mukewang.com/climg/611e33b609af982102980070.jpg

祝学习愉快~


2

albert_aGHTZ7

2022-01-14

l=(long)f;     //因为变量f属于单精度类型字面值,根据数据转换原则,单精度型转换为长整形,需要强制转换。

0

爱问问题的小菜鸡

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型数据很大很大,那就很有可能会真正损失精度了,
表示的结果会完全不是我们预期的那样了

0

0 学习 · 9886 问题

查看课程