Maison  >  Questions et réponses  >  le corps du texte

La conversion implicite de float (nombre) en int perd en précision

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粉449281068P粉449281068387 Il y a quelques jours877

répondre à tous(2)je répondrai

  • P粉043295337

    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;

    répondre
    0
  • P粉211600174

    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);

    répondre
    0
  • Annulerrépondre