整数除法:如何产生双倍?

整数除法:如何产生双倍?

对于此代码块:

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

价值d0.0。它可以通过铸造来强制工作:

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

但还有别的方法能让你得到正确的答案吗?double结果?我不喜欢铸造原始人,谁知道会发生什么。


倚天杖
浏览 844回答 4
4回答

函数式编程

double num = 5;这就避免了一个演员。但是你会发现转换定义得很好。你不用猜,只要检查一下JLS。INT到Double是一个扩大的转换。从…第5.1.2节:扩大原语转换不会丢失有关数字值的总体大小的信息。[...]将int值或长值转换为浮动值,或将长值转换为双倍值,可能会导致精度下降-也就是说,结果可能会丢失一些最不重要的值位。在这种情况下,产生的浮点值将是整数值的正确舍入版本,使用ieee 754圆到最近模式。(第4.2.4节).5完全可以表示为双。

茅侃侃

铸造原语有什么问题?如果你出于某种原因不想投,你可以double d = num * 1.0 / denom;

ABOUTYOU

我不喜欢铸造原始人,谁知道会发生什么。为什么你不理性地害怕投原语?当你投一个int转到double。如果您只是不确定它是如何工作的,请在Java语言规范。铸造int到double是拓宽本原转换.您可以通过抛出分母而不是分子来消除额外的括号:double d = num / (double) denom;
打开App,查看更多内容
随时随地看视频慕课网APP