Augmenter le pouvoir en PHP
-
06-07-2019 - |
Question
Eh bien, je dois faire quelques calculs en script PHP. Et j’ai une expression qui se comporte mal.
echo 10^(-.01);
Sorties 10
echo 1 / (10^(.01));
Sorties 0
echo bcpow('10', '-0.01') . '<br/>';
Sorties 1
echo bcdiv('1', bcpow('10', '0.01'));
Sorties 1 000 ....
J'utilise bcscale (100)
pour les calculs BCMath.
Excel et Wolfram Mathematica ont répondu ~ 0,977237.
Des suggestions?
La solution
Le curseur est un opérateur XOR en PHP. Vous devez utiliser pow ()
pour les entiers.
Autres conseils
PHP 5.6 a finalement introduit un opérateur de puissance innée, signalé par un double astérisque ( **
) - à ne pas confondre avec ^
, l'opérateur XOR au niveau du bit.
Avant la 5.6:
$power = pow(2, 3); // 8
5.6 et plus:
$power = 2 ** 3;
Un opérateur d'affectation est également disponible:
$power = 2 ** 2;
$power **= 2; // 8
Après de nombreuses discussions et votes, il a été décidé que l'opérateur serait associatif à droite (pas à gauche) et que sa priorité était supérieure à l'opérateur pas au niveau du bit ( ~
).
$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)
De plus, pour une raison qui n’a pas beaucoup de sens pour moi, la puissance est calculée avant l’opérateur négatif ( -
), donc:
$b = -2 ** 2; // -4, same as writing -(2 ** 2) and not 4
L'opérateur ^
est le bitwise Opérateur XOR . Vous devez utiliser pow
, bcpow
ou gmp_pow
:
var_dump(pow(10, -0.01)); // float(0.977237220956)
La la fonction bcpow ne prend en charge que les exposants d'entiers. Essayez plutôt d'utiliser pow .
À partir de 2014 et de la mise à jour alpha PHP 5.6, il existe une fonctionnalité importante qui, j'espère, en fera la version finale de PHP. C'est l'opérateur **
.
Vous pouvez donc utiliser 2 ** 8
pour obtenir 256
. Les documents PHP indiquent: Un opérateur **
associé de droite a été ajouté pour prendre en charge l’exponentiation " ;.