计算输出中的错误值

时间:2011-10-21 15:35:32

标签: php math

以下代码输出“3”。我期待“1”。

echo $resultado."\n"; // show 2
$valor = $resultado * ($resultado - 1 / 2);

echo $valor."\n"; // show 3, and should be 1

为什么会这样?

7 个答案:

答案 0 :(得分:3)

因为除法1 / 2优先于操作顺序。所以你真的有这个表达式:

$resultado * ($resaltudo - (1 / 2))

您应该添加括号:

$resultado * (($resaltudo - 1) / 2)

得到你想要的答案。

答案 1 :(得分:1)

不,你错了。 /具有优先权 - 因此您的行就像:

$valor = $resultado * ($resultado - (1 / 2));

那就是:

$valor = 2 * (2 - 0.5); // and so $valor = 3

答案 2 :(得分:1)

这是因为除法运算符(/)的优先级高于减法运算符(-)。

您的表达式按顺序变为:

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);

答案 3 :(得分:1)

/优先于+或 - 要获得1,您需要使用

$resultado * (($resultado - 1) / 2)

答案 4 :(得分:0)

在表达式中替换$resultado,您得到:

$valor = 2 * (2 - 1 / 2);

2 - 1 / 2 = 1.5
2 * 1.5 = 3

我的建议是复习基本数学;)

答案 5 :(得分:0)

将其更改为:

echo $resultado."\n";
$valor = $resultado * (($resultado - 1) / 2);

echo $valor."\n";

您实际上正在2 * (2 - (1 / 2) = 2 * 1.5 = 3

答案 6 :(得分:0)

2 *(2-1 / 2)

除法运算符的运算符优先级高于减号运算符,因此计算机将按如下方式计算: 2 *(2-(1/2))= 2 * 1.5 = 3

大量使用括号。