Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么乘以1/2与乘以0.5得出的值不同?_Java_Math_Operators - Fatal编程技术网

Java 为什么乘以1/2与乘以0.5得出的值不同?

Java 为什么乘以1/2与乘以0.5得出的值不同?,java,math,operators,Java,Math,Operators,正如标题所说,我有点困惑,为什么乘以1/2和乘以0.5有点不同 使用以下代码: double range = (46/2) + (1/2 * height); //say height is 10 double range = (46/2) + (.5 * height); //say height is 10 返回: 23 28 这显然是一个不正确的值,它似乎只是在评估46/2零件 但是,当我这样做时: double range = (46/2) + (1/2 * height)

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

使用以下代码:

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

23 
28
这显然是一个不正确的值,它似乎只是在评估46/2零件

但是,当我这样做时:

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

23 
28
这是正确的

那么为什么会这样呢


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

好的,那么现在发生的事情是,在第一个例子中,(1/2*10)被转换成整数,所以它是0,当添加到(46/2)时,它是23。然后,当你这样做(.5*10)时,它被转换成一个双精度,然后再加回(46/2),结果是23+5,好的,所以在第一个例子中,(1/2*10)被转换成一个整数,所以它是0,然后它被添加到(46/2)时是23。然后,当你这样做(.5*10)时,它被转换成一个双精度,然后加回到(46/2),结果是23+5

1/2*高度是
0
,因为
1/2
由于整数语义是
0

尝试
1.0/2*height
,您将得到相同的结果

1/2*height
0
,因为
1/2
0
由于整数语义。

尝试
1.0/2*height
,您将得到相同的结果

您的1/2计算为0,因为您在计算后没有要求浮点或双精度值…使用浮点表示查看结果。

您的1/2计算为0,因为您在计算后没有要求浮点或双精度值…使用浮点表示查看结果结果。

尝试将1/2括在括号中,如(1/2),它应该work@VivekSolanki不,这似乎对我不起作用。哦,是的,对了,对不起,我很糟糕,我错过了类型转换:)@VivekSolanki好的,没问题。试着像(1/2)一样将1/2括在括号中,应该是这样的work@VivekSolanki不,这对我来说似乎不起作用。哦,是的,对了,对不起,我的错,我错过了类型转换:)@VivekSolanki好的,没问题。啊哈!好吧,也许你应该知道。哦,现在我知道了。谢谢既然我相信你先回答了,我就接受你的答复。感谢@Arachnid Hivemind和Kondu的快速响应。这是你(我和我猜每个人)一次又一次地做错事的原因。^^^啊哈!好吧,也许你应该知道。哦,现在我知道了。谢谢既然我相信你先回答了,我就接受你的答复。感谢@Arachnid Hivemind和Kondu的快速响应。这是你(以及我和我猜每个人)一次又一次地做错事的原因。^^谢谢你的回答!我只能接受一个,所以我要把它给马丁,因为他是第一个得到它的。哈哈,这是一个残酷的世界。嘿,它让你保持敏锐。谢谢你的回答!我只能接受一个,所以我要把它给马丁,因为他是第一个得到它的。哈哈,这是一个残酷的世界。嘿,它让你保持敏锐。谢谢你的回答!我只能接受一个,所以我要把它给马丁,因为他先拿到了。谢谢你的回答!我只能接受一个,所以我要把它给马丁,因为他先拿到的