将int / long零转换为double

时间:2013-02-05 11:22:41

标签: java integer double type-conversion long-integer

考虑此代码段:

int i = 0;
double d1 = (double) i;
long l = 0L;
double d2 = (double) l;

在我的机器上运行此功能会为两次转换打印0.0d1d2除了0.0之外什么都可以?

据我了解,这是扩展基元转换 spec says

  

扩展的原始转换不会丢失有关的信息   数值的整体幅度。

以及

  

将int或long值的扩展转换为float或long   值加倍,可能导致精度损失

据我了解规范,上述内容意味着int 0将永远变为double 0.0long 0可以转换为其他内容(例如1E-20或类似的内容)。我的规范解释是否正确?

1 个答案:

答案 0 :(得分:3)

完整的引用是:

  

将int或long值扩展为float,或将long值转换为double,可能会导致精度损失 - 也就是说,结果可能会丢失该值的一些最低有效位。 在这种情况下,生成的浮点值将是整数值的正确舍入版本,使用IEEE 754舍入到最接近模式。

(强调我的)

这涵盖了无法在int / long中准确表示float / double值的情况(在这种情况下,会选择最接近的可表示值) 。显然,0 可以表示,因此人们不会指望精度会降低。