【问题标题】:Why does multiplcation by 1/2 not give the same value as multiplication by .5?为什么乘以 1/2 的值与乘以 0.5 的值不同?
【发布时间】:2016-02-19 05:44:17
【问题描述】:

正如标题所说,我有点困惑为什么乘以 1/2 与乘以 0.5 不同。

获取以下代码:

double range = (46/2) + (1/2 * height); //say height is 10 

返回:

23 

这显然是一个不正确的值,它似乎只评估了 46/2 部分。

但是,当我这样做时:

double range = (46/2) + (.5 * height); //say height is 10 

返回:

28

这是正确的。

那么为什么会这样呢?

(我确信以前有人问过这个问题,但是我不确定如何称呼这种情况,并且在 SO & google 中的搜索没有找到我的答案)

【问题讨论】:

  • 尝试将 1/2 括在括号中,如 (1/2),它应该可以工作
  • @VivekSolanki 不,这似乎对我不起作用。
  • 哦,对,对不起,我错过了类型转换:)
  • @VivekSolanki 没问题。

标签: java math operators


【解决方案1】:

1/2 * height0,因为由于整数语义,1/20。 试试1.0/2 * height,你会得到同样的结果

【讨论】:

  • 啊哈!好吧,应该早就知道了。哦,好吧,现在我知道了。谢谢。我会接受你的,因为我相信你先回答了。感谢@Arachnid Hivemind 和 Kondu 的快速响应。
  • 这是你(以及我和我猜每个人)往往会一遍又一遍地做错的事情^^
【解决方案2】:

好的,所以在第一个示例中,(1/2 * 10) 被转换为整数,因此它为 0,然后在添加到 (46/2) 时为 23。然后,当您执行 (.5 * 10) 时,它会转换为双精度,然后加回 (46/2),结果是 23 +5

【讨论】:

  • 感谢您的回答!我只能接受一个,所以我要把它给马丁,因为他先得到它。
  • 哈哈,这是一个残酷的世界。
  • 嘿,它让你保持敏锐
【解决方案3】:

您的 1/2 评估为 0,因为您在评估后不要求浮点或双精度值...使用浮点表示来查看结果。

【讨论】:

  • 感谢您的回答!我只能接受一个,所以我要把它给马丁,因为他先得到它
猜你喜欢
  • 2022-11-26
  • 2017-06-24
  • 2018-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多