好吧,我需要在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。
有什么建议吗?
答案 0 :(得分:11)
插入符号在PHP中是有点明智的XOR operator。您需要使用pow()
作为整数。
答案 1 :(得分:6)
PHP 5.6最终引入了一个固有的幂运算符,用双星号(**
)表示 - 不要与按位异或运算符^
混淆。
在5.6之前:
$power = pow(2, 3); // 8
5.6及以上:
$power = 2 ** 3;
也可以使用赋值运算符:
$power = 2 ** 2;
$power **= 2; // 8
通过许多讨论和投票,决定运算符是右关联的(不是左),其运算符优先级高于按位运算符(~
)。< / p>
$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
答案 2 :(得分:4)
^
operator is the bitwise XOR operator。您必须使用pow
,bcpow
或gmp_pow
:
var_dump(pow(10, -0.01)); // float(0.977237220956)
答案 3 :(得分:0)
bcpow function仅支持整数指数。请尝试使用pow。
答案 4 :(得分:0)
截至2014年,以及PHP 5.6 alpha更新,我希望它能够在PHP的最终版本中实现。它是**
运算符。
所以你可以2 ** 8
得到256
。 PHP Docs说:“添加了一个右关联**
运算符来支持取幂”。