以下代码输出"3"。我以为是"1"
echo $resultado."'n"; // show 2
$valor = $resultado * ($resultado - 1 / 2);
echo $valor."'n"; // show 3, and should be 1
为什么会发生这种情况?
因为除法1 / 2
在运算顺序上优先。所以你真的有这个表达式:
$resultado * ($resaltudo - (1 / 2))
你应该加上括号:
$resultado * (($resaltudo - 1) / 2)
不,你错了。/具有优先级-所以你的行就像:
$valor = $resultado * ($resultado - (1 / 2));
,即
$valor = 2 * (2 - 0.5); // and so $valor = 3
这是因为除法运算符(/
)比减法运算符(-
)具有更高的优先级。
你的表达式变成,按顺序:
1 / 2 = 0.5 // Executed first since it's the highest precedence operation inside ()
$resultado - 0.5 = 1.5 // Still in the ()
$resultado * 1.5 = 3 // Final result
要纠正表达式,在减法周围插入括号,如下所示:
$resultado * (($resultado - 1) / 2);
/优先于+或-要得到结果为1,您需要使用
$resultado * (($resultado - 1) / 2)
在表达式中替换$resultado
,得到:
$valor = 2 * (2 - 1 / 2);
2 - 1 / 2 = 1.5
2 * 1.5 = 3
我的建议是复习基础数学;)
改为:
echo $resultado."'n";
$valor = $resultado * (($resultado - 1) / 2);
echo $valor."'n";
你在有效地做2 * (2 - (1 / 2)
= 2 * 1.5
= 3
2*(2-1/2)
除法运算符的优先级比减号高,因此计算机将这样计算:2*(2-(1/2)) = 2* 1.5 = 3