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 :

calcul: pourquoi NAN


Sujet :

Langage PHP

  1. #1
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut calcul: pourquoi NAN
    salut,

    je ne connais pas vraiment la source de l'erreur, j'ai fais plusieurs recherche et j'ai rien trouvé de semblable.
    - j'extrait des prix de ma base mysql, j'applique la fonction round($prix,2), pour des prix ça me donne le resultat recherché pour dautres je me retrouve avec un NAN (not a number).
    - g aussi une fonction qui calcul la réduction selon quelque règles de gestion, elle est comme sui
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    /*
    calcul
    */
    return $reduction;//donne TOUJOURS un bon resultat 15 pour 15% par exemple
     
    //quand je met
    return $reduction*0.01;// ça me donne PARFOIS un NAN
    //quand je met
    return $reduction/100// ça me donne PARFOIS un NAN aussi 
    /*
    return 1-$reduction*0.01; //de meme
    return (100-$reduction)/100; //de meme
    */

    pour les prix je les extraits de la base mysql je me dis que c'est peut être un problème de précision ou autre (à l'origine j'ai importé mes données de plusieurs fichier excel vers mysql).
    mais pour la seconde fonction g écrit moi même des valeurs entières dans le script

    pourquoi un arrondissement ou une division sur 100 donnerai t elle un NAN????


    cordialement

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2010
    Messages : 20
    Points : 25
    Points
    25
    Par défaut
    Salut,

    Humm plutôt bizarre en effet...
    As tu essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return floatval($reduction)*0.01;
    Je ne pense pas que ce soit ça, mais sait-on jamais...

    Sinon es tu sûr de l'intégrité de tes paramètres? Quand tu as un NaN en retour quelle est la valeur du paramètre?

  3. #3
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    merci Aphox pour ta réponse, mais j'avais déjà testé avec floatval, doubleval, intval ...
    et non il n'ya aucun probleme dans la fonction, la preuve la valeur entiere est exacte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    		$k=$reduction*0.01;
    		var_dump($reduction); //donne int(15) alors que
    		var_dump($k);// float(NAN)
    		return $k;

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2010
    Messages : 20
    Points : 25
    Points
    25
    Par défaut
    Bon eh bien pour le coup je ne vois pas trop...

    J'ai eu un problème similaire il y a quelques jours, j'avais "NaN" affiché dans des champs de formulaires (après calcul), pour y remédié j'ai fais comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo  $variable.""; ?>
    C'est très propre
    Mais ça a marché... Puis avec la souplesse du PHP rien n'empêche de le récupérer en float plus tard...

  5. #5
    Membre expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Points : 3 377
    Points
    3 377
    Par défaut
    Tu dis que $resultat vient d'une base MySQL, quel est le type de l'attribut correspondant dans la base ?

  6. #6
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    non je dis que $prix viens d'une base de donnée il est de type double sur ma base mysql, quand j'applique la fonction round il me donne PARFOIS un nan
    pour la fonction la valeur de $reduction est obtenu directement âpres des tests conditionnels le var_dump me dit que c un int, seulement une division sur 100 me donne parfois un NAN

  7. #7
    Expert confirmé
    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
    Points : 4 853
    Points
    4 853
    Par défaut
    Salut,

    Tu peux trouver l'explication de ce problème sur la page http://fr2.php.net/manual/fr/function.is-nan.php#62504
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  8. #8
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    merci Thes pour l'explication, mais j'ai posté ici dans l'espoir de trouver la solution à ce comportement qui reste toujours inexplicable

  9. #9
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2007
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    Il avait un bug pour la fonction round ()
    Je ne sais pas sur quelle version de PHP vous êtes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $reduction=NAN;
     
    echo var_dump($reduction);
    Ce code donne comme résultat :

    float(NAN)

    ou

    float(0)


    Si vous avez la bonne version de PHP le résultat dois êtres float(NAN)

  10. #10
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    je travail en local sous la derniere version de easyphp sous windows xp
    la version de php est 5.3.3 c la plus recente je pense
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $reduction=NAN;
     
    echo var_dump($reduction);
    donne bel et bien float(NAN)
    je suis convaincu que cela N'est pas une erreur dans mon code, j'ai passé des heures et des heures à faire des tests
    les valeurs sont affichées correctement et entre dans les calculs sans souci, dés que j'utilise la fonction round ou que je divise sur 100 il y a le fameu NAN qui reviens, mais pas tjr

  11. #11
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Points : 822
    Points
    822
    Par défaut
    Cela proviendrait pas d'une erreur de calcul sur les flottants comme ça arrive parfois ?

    T'as essayé tes opérations en utilisant les fonction BC Math ?
    Pourfendeur de singletons en croisade

  12. #12
    Membre éclairé Avatar de nsanabi
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    Points : 678
    Points
    678
    Par défaut
    merci tout le monde pour vos propositions

    apparemment des réels avec 8 ou 9 chiffres après la virgule faisaient flipper php, et rendaient de simples calculs comme la division sur 100 impossible

    au final j'ai changé la façon avec laquelle je récupère mes données en créant une vue qui s'occupai d'arrondir les valeurs (à 4 chiffres après virgule assez satisfaisante)
    une fois ces valeurs récupérées par mon script php les calculs sont tous corrects


    cordialement

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

Discussions similaires

  1. Calcul -> NAN en C++
    Par Spout dans le forum C++
    Réponses: 22
    Dernier message: 27/08/2008, 01h46
  2. type "short" erreur de calcul, pourquoi ?
    Par Link_GZ dans le forum C
    Réponses: 4
    Dernier message: 04/05/2007, 13h15
  3. Valeur de retour d'un petit calcul "NaN"
    Par lodan dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 09/01/2007, 21h10
  4. [NaN] Calcul d'une régression linéaire
    Par GLDavid dans le forum Langage
    Réponses: 1
    Dernier message: 24/10/2006, 12h55
  5. Réponses: 4
    Dernier message: 26/08/2006, 02h01

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