IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Erreur de calcul inexpliquée ( x + y) * 10


Sujet :

Langage PHP

  1. #1
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Par défaut Erreur de calcul inexpliquée ( x + y) * 10
    Salut tout le monde,

    Je suis tombé par hasard sur ce comportement du moins étrange.

    Soit le code suivant :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $strange = ( 0.1 + 0.6 ) * 10;
    $result = (Int) $strange;// transtypage d'un Flottant vers un Entier
    echo $result;// output : 7
    ?>

    puis on remplace 0.6 par 0.7
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $strange = ( 0.1 + 0.7 ) * 10;
    $result = (Int) $strange;// transtypage d'un Flottant vers un Entier
    echo $result;// output : 7
    ?>

    D'après PHP, 10 * ( 0.1 + 0.7 ) == 7
    Bizarre! Vous avez dit bizarre ? comme c'est bizarre.

    Quelqu'un saurai m'expliquer pourquoi ce comportement ?


    J'ai néanmoins trouvé le "correctif" mais pas l'explication.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php
    $strange = ( 0.1 + 0.7 ) * 10;
    $result = (int) round($strange);
    echo $result;// output : 8
    ?>
    Crdlt,

  2. #2
    Membre Expert
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Par défaut
    salut CR_Gio,

    ce n'est pas nouveau. voir http://fr2.php.net/manual/fr/languag...nteger.casting
    Le comportement de la conversion en un entier est indéfini depuis les autres types. Ne rapporter aucun comportement observé, sachant qu'ils peuvent changer sans avertissement.

  3. #3
    Inactif Avatar de CR_Gio
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    1 195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 195
    Par défaut
    Yes!

    Merci Thes32 pour le lien et ta réponse.

    Je retiens aussi :
    Citation Envoyé par PHP doc
    Si le nombre à virgule flottante est au delà des limites des entiers (habituellement, +/- 2.15e+9 = 2^31), le résultat sera indéfini, sachant que le nombre à virgule flottante n'a pas une précision suffisante pour donner un résultat entier exact
    En conclusion, je rejoin Thes32
    Citation Envoyé par PHP doc
    Ne convertissez jamais une fraction inconnue en un entier
    PS : du coup personne n'a gagner les 1000 point lol

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur de compilation inexpliquée
    Par seb__ dans le forum C
    Réponses: 5
    Dernier message: 10/10/2006, 07h50
  2. [Tableaux] erreur de calcul
    Par dleu dans le forum Langage
    Réponses: 18
    Dernier message: 08/12/2005, 13h28
  3. erreur sur calcul
    Par Sendo dans le forum Access
    Réponses: 2
    Dernier message: 29/09/2005, 09h46
  4. Rotation erreur de calcul
    Par Speed41 dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 09/03/2005, 16h55
  5. C++Builder fait une erreur de calcul
    Par gandf dans le forum C++Builder
    Réponses: 7
    Dernier message: 03/01/2004, 22h27

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo