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 :

Résultats étranges après utilisation de round()


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut Résultats étranges après utilisation de round()
    Bonjour à tous,

    Je ne comprends pas les résultats que j'obtiens après avoir utilisé la fonction round()

    je prends un chiffre representant une somme à laquelle j'applique une remise soit :

    $totalNet=$brutActi-(($brutActi*$remise)/100);

    comme ma remise ne donne pas forcément un résultat rond je cherche à le ramaner à 2 décimales soit :

    $totalNet=round($totalNet*100)/100;

    à ce stade si je fais un echo de mon résultat j'obtiens par exemple

    $totalNet=387.5

    j'ai maintenant une autre variable $sommeRecue=387.5

    et quand je fais l'opération suivante

    echo ($totalNet-$sommeRecue);

    j'obtiens :

    -5.6843418860808E-14



    quelqu'un peut-il me dire pourquoi et m'expliquer comment y remedier ?

    Bonne fin de journée à tous

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Ton résultat est effectivement bizarre, mais ceci dit, ton code aussi me parait bizarre.
    Pourquoi $totalNet=round($totalNet*100)/100; ? SI c'est pour obtenir 2 chiffres après la virgule, round fait ça tout seul
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $totalNet = $brutActi-(($brutActi*$remise)/100);
    $totalNet = round($totalNet, 2);
    echo ($totalNet-$sommeRecue);

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Merci de ta réponse

    effectivement c'est plus simple comme ça

    Je vais essayer en corrigeant mon code et si le résultat est moins fantaisiste je viendrais mettre le tag résolu

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Alors,

    Il y a toujours des trucs que je ne comprend pas

    effectivement maintenant le résultat de l'opération est juste, mais lorsque je compare le résultat obtenu avec ma variable $sommeRecue comme ceci :

    echo $totalNet // renvoi : 387.5
    echo $sommeRecue // renvoi 387.5

    if($totalNet != $sommeRecue) echo "faux"; else echo "vrai";

    le script me renvoi : "faux"

    si je passe en commentaire ma ligne :

    // $totalNet=round($totalNet,2);

    le script me renvoi : "vrai"

    je ne peux pourtant pas me passer de cette ligne car une remise peut générer un totalNet de 387.501 (par exemple) et comme on ne réclame pas le dixième de centime au client au moment du réglement la vérification de concordance entre la somme due et la somme versée indiquerai une erreur de 0.01 centime.

    Quelqu'un peut-il m'aider à tirer ça au clair ?

  5. #5
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 380
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 380
    Points : 15 732
    Points
    15 732
    Par défaut
    les résultats que tu obtiens viennent de la façon dont sont stockés les nombre à virgule flottante (en PHP et avec d'autres langage)
    par exemple 1.4 est stocké sous la forme 1.399999999999999911182158029987476766109466552734375
    donc tu ne peux pas utiliser "==" et "!=" mais tu dois vérifier que la différence de 2 nombres est plus petite qu'une certaine valeur comme ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo (abs($totalNet - $sommeRecue) < 0.000001) ? 'égaux' : 'différents';

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    530
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 530
    Points : 316
    Points
    316
    Par défaut
    Merci beaucoup de ta réponse Mathieu

    Je comprends mieux maintenant les réponses que j'obtiens et je vais pouvoir faire des tests plus cohérents.

    Bonne journée à tous.

    PS: je fais quelques tests et je viendrai mettre le tag "résolu" si tout fonctionne

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

Discussions similaires

  1. [dll] libérer une dll apres utilisation
    Par polo54 dans le forum API standards et tierces
    Réponses: 12
    Dernier message: 11/07/2009, 22h48
  2. COUNT(*), résultat étrange
    Par JuTs dans le forum Requêtes
    Réponses: 1
    Dernier message: 03/10/2005, 15h54
  3. Comportement étrange apres une désinstallation
    Par Sunchaser dans le forum Excel
    Réponses: 4
    Dernier message: 06/08/2005, 19h44
  4. Résultat étrange avec les lumières.
    Par MaxPayne dans le forum OpenGL
    Réponses: 4
    Dernier message: 12/04/2005, 18h04
  5. [FB] installation et apres? utilisation ???
    Par vad dans le forum Débuter
    Réponses: 7
    Dernier message: 17/02/2005, 09h55

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