小编典典

整数除法:如何产生双精度数?

all

对于此代码块:

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

d值为0.0。它可以通过强制转换强制工作:

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

但是还有其他方法可以得到正确的double结果吗?我不喜欢铸造原语,谁知道会发生什么。


阅读 111

收藏
2022-04-25

共1个答案

小编典典

double num = 5;

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

加宽基元转换不会丢失有关数值整体大小的信息。

[…]

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

5 可以精确地表示为双精度数。

2022-04-25