就像标题所说的那样,我有点困惑,为什么乘以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
哪个是对的。
那为什么会这样呢?
(我确定之前已经问过这个问题,但是我不知道该怎么称呼这种情况并且在搜索引擎优化和谷歌搜索中找不到答案)
答案 0 :(得分:4)
1/2 * height
为0
,因为整数语义1/2
为0
。
试试1.0/2 * height
,你会得到相同的结果
答案 1 :(得分:2)
好的,那就是在第一个例子中,(1/2 * 10)被转换成一个整数,所以它是0,然后当它被加到(46/2)时它是23。然后,当你做(.5 * 10)时它被转换为一个双倍然后加回到(46/2),结果是23 +5
答案 2 :(得分:1)
你的1/2评估为0,因为你在评估后没有要求浮点值或双值...使用浮点表示来查看结果。