3

好吧,我需要在 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 的答案。

有什么建议么?

4

5 回答 5

11

插入符号是PHP中的按位XOR 运算符。您需要使用pow()整数。

于 2009-07-31T09:30:48.397 回答
6

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
于 2014-02-26T10:18:19.897 回答
4

^运算符是按位异或运算符。您必须使用pow,bcpowgmp_pow:

var_dump(pow(10, -0.01));  // float(0.977237220956)
于 2009-07-31T09:31:54.277 回答
0

截至 2014 年,以及 PHP 5.6 alpha 更新,有一个包含很多的功能,我希望它能够成为 PHP 的最终版本。是**运营商。

所以你能做的2 ** 8就会得到你256。PHP Docs 说:“**已添加右关联运算符以支持求幂”。

于 2014-04-30T00:02:01.697 回答
0

bcpow函数仅支持整数指数。尝试使用pow代替。

于 2009-07-31T09:37:29.553 回答