Maison > Questions et réponses > le corps du texte
J'ai utilisé cette formule avant php 8.1
<?php $number = 0; echo log10(abs($number)) / 3 | 0; echo PHP_EOL; $number = 100; echo log10(abs($number)) / 3 | 0; echo PHP_EOL; $number = 1100; echo log10(abs($number)) / 3 | 0; echo PHP_EOL; $number = 10000000; echo log10(abs($number)) / 3 | 0; ?>
Cela a très bien fonctionné, mais maintenant, après la mise à niveau, je continue à recevoir ces erreurs
Deprecated: Implicit conversion from float -INF to int loses precision Deprecated: Implicit conversion from float 0.6666666666666666 to int loses precision Deprecated: Implicit conversion from float 1.0137975617194084 to int loses precision Deprecated: Implicit conversion from float 2.3333333333333335 to int loses precision
Je n'arrive pas à trouver ou à comprendre dans la documentation 8.1 pourquoi cela se produit maintenant
P粉0432953372023-10-22 12:07:10
// Implicit variant $number= "2"; $calc = 2 + $number; // Cast variant $number = "2"; $calc= 2 + (int) $number; // Explicit variant $number = "2"; $calc = 2 + intval($number); // Everything is good variant ^^ $number = 2; $calc = 2 + $number;
P粉2116001742023-10-22 10:41:26
Lorsque vous effectuez une opération OU au niveau du bit via l'opérateur |
, vous obtenez une conversion implicite en un entier. C'est une façon... étrange... de convertir en un nombre entier. Pour éviter l'avertissement, lancez simplement un casting explicite.
Implicite :
echo log10(abs($number)) / 3 | 0;
Passez explicitement la fonction :
echo intval(log10(abs($number)) / 3);
Ou via casting :
echo (int) (log10(abs($number)) / 3);