整数分区:你如何生成一个double?

问题:

对于这个代码块:

int num = 5;
int denom = 7;
double d = num / denom;

d的值为0.0。它可以被迫通过铸造工作:

double d = ((double) num) / denom;

但是还有另一种获得正确double结果的方法吗?我不喜欢投放原始图像,谁知道会发生什么。

回答:

double num = 5;

这避免了一个演员。但是,您会发现转换转换是明确定义的。你不必猜测,只需检查JLS。 int to double是一个扩大的转换。从§5.1.2

扩大原始转换不会丢失有关数值的整体大小的信息。
[…]
将int或long值转换为float,或将long值转换为double可能导致精度损失,也就是说,结果可能会丢失该值的一些最低有效位。在这种情况下,所得到的浮点值将是整数值的正确舍入版本,使用IEEE 754 round-to-nearest模式(§4.2.4)

5可以精确地表示为双重。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Integer division: How do you produce a double?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 24 = 32