【发布时间】:2013-01-20 07:28:25
【问题描述】:
考虑到这段代码sn-p:
int i = 0;
double d1 = (double) i;
long l = 0L;
double d2 = (double) l;
在我的机器上运行它会为两种转换打印0.0。 但是d1 和d2 可以不是0.0 吗?
据我了解,这是一个 扩大的原始转换,spec says:
扩展原语转换不会丢失有关 数值的总大小。
还有
将 int 或 long 值转换为 float 或 long 值加倍,可能会导致精度损失
据我了解规范,上述内容意味着int 0 将始终变为double 0.0,但long 0 可以转换为其他内容(例如1E-20 或类似内容)。我的规范解释正确吗?
【问题讨论】:
-
“精度损失”怎么可能为零?零没有任何精度可以丢失。不是一个真正的问题。
-
事实上我已经回答了这个问题,而且其中没有任何 FUD。尽量不要反应过度。
标签: java integer double type-conversion long-integer