为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

倚天杖 2019-05-30 11:13:28
整数除法:如何产生双倍?对于此代码块:int num = 5;int denom = 7;double d = num / denom;价值d是0.0。它可以通过铸造来强制工作:double d = ((double) num) / denom;但还有别的方法能让你得到正确的答案吗?double结果?我不喜欢铸造原始人,谁知道会发生什么。
查看完整描述

4 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

double num = 5;

这就避免了一个演员。但是你会发现转换定义得很好。你不用猜,只要检查一下JLS。INT到Double是一个扩大的转换。从…第5.1.2节:

扩大原语转换不会丢失有关数字值的总体大小的信息。

[...]

将int值或长值转换为浮动值,或将长值转换为双倍值,可能会导致精度下降-也就是说,结果可能会丢失一些最不重要的值位。在这种情况下,产生的浮点值将是整数值的正确舍入版本,使用ieee 754圆到最近模式。(第4.2.4节).

5完全可以表示为双。


查看完整回答
反对 回复 2019-05-30
?
茅侃侃

TA贡献1842条经验 获得超21个赞

铸造原语有什么问题?

如果你出于某种原因不想投,你可以

double d = num * 1.0 / denom;


查看完整回答
反对 回复 2019-05-30
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

我不喜欢铸造原始人,谁知道会发生什么。

为什么你不理性地害怕投原语?当你投一个int转到double。如果您只是不确定它是如何工作的,请在Java语言规范。铸造intdouble拓宽本原转换.

您可以通过抛出分母而不是分子来消除额外的括号:

double d = num / (double) denom;


查看完整回答
反对 回复 2019-05-30
  • 4 回答
  • 0 关注
  • 843 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信