2009-07-31 40 views
3

那麼,我需要在PHP腳本中進行一些計算。我有一個表達錯誤。在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

The ^ operator is the bitwise XOR operator。您可以選擇使用powbcpowgmp_pow

var_dump(pow(10, -0.01)); // float(0.977237220956) 
+0

我試過使用bcpow。沒有運氣。 – 2009-07-31 09:42:40

+2

似乎gmp_pow只接受正面權力。當然,我們可以轉換成1/gmp_pow('10','.01'):) – 2009-07-31 09:49:58

6

PHP 5.6終於推出了一個由雙星號(**)表示的先天電力運營商 - 不要與^這個按位異或運算符混淆。

之前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 
0

截至2014年,和PHP 5.6 alpha更新,我希望它能夠最終發佈PHP。這是**運營商。

所以你可以做2 ** 8會讓你256。 PHP文檔說:「一個正確的關聯**運營商已被添加到支持取冪」。