为什么乘以 1/2 的值与乘以 .5 的值不同?

Why does multiplcation by 1/2 not give the same value as multiplication by .5?

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

取如下代码:

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

这个returns:

23 

明显是错误的值,好像只评价46/2的部分

但是,当我这样做时:

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

这个returns:

28

这是正确的。

那么为什么会这样呢?

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

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

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

您的 1/2 计算结果为 0,因为您在计算后不要求浮点数或双精度值...使用浮点表示形式查看结果。