-
06-07-2019 - |
题
好吧,我需要在PHP脚本中做一些计算。我有一个行为错误的表达。
echo 10^(-.01);
输出10
echo 1 / (10^(.01));
输出0
echo bcpow('10', '-0.01') . '<br/>';
输出1
echo bcdiv('1', bcpow('10', '0.01'));
输出1.000 ....
我正在使用 bcscale(100)
进行BCMath计算。
Excel和Wolfram Mathematica给出答案〜0,977237。
有什么建议吗?
其他提示
PHP 5.6最终引入了一个固有的幂运算符,用双星号( **
)表示 - 不要与按位XOR运算符 ^
混淆。
在5.6之前:
$power = pow(2, 3); // 8
5.6及以上:
$power = 2 ** 3;
也可以使用赋值运算符:
$power = 2 ** 2;
$power **= 2; // 8
通过许多讨论和投票,决定运算符是右关联的(不是左),其运算符优先级高于按位非运算符(〜
)。
$a = 2 ** 3 ** 2; // 512, not 64 because of right-associativity
$a = 2 ** (3 ** 2); // 512
$b = 5 - 3 ** 3; // -22 (power calculated before subtraction)
另外,由于某种原因对我来说没有多大意义,权力是在否定一元运算符( -
)之前计算的,因此:
$b = -2 ** 2; // -4, same as writing -(2 ** 2) and not 4
^
运算符是按位的XOR运算符。您必须使用 pow
, bcpow
或 <代码> gmp_pow 代码> :
var_dump(pow(10, -0.01)); // float(0.977237220956)
截至2014年,以及PHP 5.6 alpha更新,我希望它能够在PHP的最终版本中实现。它是 **
运算符。
所以你可以做 2 ** 8
会得到 256
。 PHP Docs说:“添加了一个右关联 **
运算符以支持取幂”。
不隶属于 StackOverflow