为什么乘以 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 * height
是 0
因为 1/2
是 0
由于整数语义。
尝试 1.0/2 * height
,你会得到相同的结果
您的 1/2 计算结果为 0,因为您在计算后不要求浮点数或双精度值...使用浮点表示形式查看结果。
如标题所说,我有点困惑为什么乘以 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 * height
是 0
因为 1/2
是 0
由于整数语义。
尝试 1.0/2 * height
,你会得到相同的结果
您的 1/2 计算结果为 0,因为您在计算后不要求浮点数或双精度值...使用浮点表示形式查看结果。