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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    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
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2010
    Messages : 20
    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
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    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
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    20
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2010
    Messages : 20
    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
    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
    Inactif  
    Homme Profil pro
    Inscrit en
    Septembre 2003
    Messages
    570
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Septembre 2003
    Messages : 570
    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

+ 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