从oracle说明
来自 Oracle Docs
的参考资料扩大原始转换 对基本类型的19个特定转换称为扩展基元转换:
如果一个浮点数有32位而一个长数据有64位,那怎么算是加宽?这不应该被视为缩小范围吗?
答案 0 :(得分:20)
float
或double
可以表示的值范围远大于long
可以表示的范围。虽然从long
转换为float
时可能会丢失有效数字,但它仍然是“扩大”操作,因为范围更广。
来自Java Language Specification, §5.1.2:
将int或long值扩展为float,或将long值转换为double,可能会导致精度损失 - 也就是说,结果可能会丢失该值的一些最低有效位。在这种情况下,使用IEEE 754舍入到最接近模式(第4.2.4节),得到的浮点值将是整数值的正确舍入版本。
请注意,double
可以准确代表每个可能的int
值。
答案 1 :(得分:2)
它被认为是扩大的,因为float
和double
可以代表比long
更大的值。您可能会失去精确度,但可以表示该值(至少近似值)。
答案 2 :(得分:2)
它被认为是加宽,因为浮点数可以表示的数字大于可以用long表示的数字。仅仅因为float使用32位精度并不意味着它可以表示的数字限制为2 ^ 32。
例如,float (float)Long.MAX_VALUE+(float)Long.MAX_VALUE
大于Long.MAX_VALUE
,即使float的精度低于long {{1}}。
答案 3 :(得分:1)
如果你用简单的术语来看问题,那就是原始设计师如何表达数据。
理想情况下,long(64)的位深度大于float(32)。但浮动数据使用scientific notion表示 这允许代表更大的范围
Ex:300 [原始号码]:3×102 [科学代表]
长:-2 ^ 63到2 ^ 63-1
浮动:( - 3.4)* 10 ^ 38至(3.4)* 10 ^ 38
注意长(2的幂)Vs Float(10的幂)代表性差异,这允许浮动具有更高的范围
希望这有用