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 :

Calculs mathématiques avec php


Sujet :

Langage PHP

  1. #1
    Invité
    Invité(e)
    Par défaut Calculs mathématiques avec php
    Merci à tous, grâce à vous je m'améliore de jour en jour. J'ai quelques difficultés avec un calcul mathématique contenant des variables et je ne trouves rien de bien clair par google à ce sujet. Je veux additioner 12 variables et ensuite diviser la somme obtenu par 12, voici le code que j'ai écrit, mais qui donne des résultats inexactes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $total_moyenne = ($moyenne1 + $moyenne2 + $moyenne3 + $moyenne4 + $moyenne5 + $moyenne6 + $moyenne7 + $moyenne8 + $moyenne9 + $moyenne10 + $moyenne11 + $moyenne12);
    	$moyenne_film = number_format( $total_moyenne / 12, 1, ',', '') ;

  2. #2
    Membre averti
    Homme Profil pro
    Aucun
    Inscrit en
    Août 2015
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Aucun

    Informations forums :
    Inscription : Août 2015
    Messages : 19
    Par défaut
    Bonjour, selon moi ce serais plutot cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    <?php
    $moyenne1 = 1;
    $moyenne2 = 1;
    $moyenne3 = 1;
    $moyenne4 = 1;
    $moyenne5 = 1;
    $moyenne6 = 1;
    $moyenne7 = 1;
    $moyenne8 = 1;
    $moyenne9 = 1;
    $moyenne10 = 1;
    $moyenne11 = 1;
    $moyenne12 = 1;
     
    $total_moyenne = ($moyenne1 + $moyenne2 + $moyenne3 + $moyenne4 + $moyenne5 + $moyenne6 + $moyenne7 + $moyenne8 + $moyenne9 + $moyenne10 + $moyenne11 + $moyenne12 );
     
    echo $total_moyenne;
     
    ?>
    J'espère d'avoir aidé et avoir bien été clair,

  3. #3
    Invité
    Invité(e)
    Par défaut
    Selon ce que tu as écrit, les moyennes valent toutes 1? Je crois pas que ce soit ce que je recherche, chacune de mes moyennes contient déja une valeur que j'ai indiqué plus haut dans mon code.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Par défaut
    Très certainement un problème d'arrondi entre les entiers et les nombres réels. C'est le problème du PHP et des langages non typés en général.

    Au départ, les variables $moyenne1, $moyenne2, etc, contiennent des nombres entiers ou bien des nombres à virgule ?

  5. #5
    Invité
    Invité(e)
    Par défaut
    Nombres à virgule effectivement, et j'ai constaté que la somme des 12 $moyennes affiche un résultat sans décimales... alors que faire

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Par défaut
    Il faut faire un cast

  7. #7
    Invité
    Invité(e)
    Par défaut
    Je ne vois pas le terme Cast dans la page où tu m'as envoyé?

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Par défaut
    Pardon... Transtypage en français.

    Concrètement, si :

    $moyenne1 = 5.4
    $moyenne2 = 8

    $moyenne1 est un float
    $moyenne2 est un entier

    mais $moyenne1 + $moyenne2 sera un entier égal à 13 (ligne 4 de l'exemple)
    Il faut faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (float) $moyenne1 + (float) $moyenne2 + (float) $moyenne3 + ...
    (float ou double, suivant la précision voulue)

  9. #9
    Invité
    Invité(e)
    Par défaut
    C'est exactement ce que je viens d'essayer de faire mais le résultat ne change pas...

  10. #10
    Invité
    Invité(e)
    Par défaut
    Dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $total_moyenne = ((float) $moyenne1 + (float) $moyenne2 + (float) $moyenne3 + (float) $moyenne4 + (float) $moyenne5 + (float) $moyenne6 + (float) $moyenne7 + (float) $moyenne8 + (float) $moyenne9 + (float) $moyenne10 + (float) $moyenne11 + (float) $moyenne12);
    pareil avec ou sans float, il considère chaque moyenne comme étant "2" alors que je leur ai donné une valeur de "2,5"

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Par défaut
    Pas "2,5" mais "2.5" avec un point

  12. #12
    Invité
    Invité(e)
    Par défaut
    ouais c'est ce que jvoulais dire, désolé je me suis mal exprimé

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2013
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2013
    Messages : 23
    Par défaut
    Fais un var_dump pour avoir le type de tes variables

    Peut-être que la perte de précision est dans la division. Essaye :


  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    $moyenne1 est un float $moyenne2 est un entier
    mais $moyenne1 + $moyenne2 sera un entier égal à 13 (ligne 4 de l'exemple)
    faux : la somme sera un float de 13.4

    Ton code fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    $moyenne1 = 2.5;
    $moyenne2 = 3.2;
    $moyenne3 = 4.7;
    $moyenne4 = 6.8;
    $total_moyenne = $moyenne1 + $moyenne2 + $moyenne3 + $moyenne4;
    echo number_format($total_moyenne / 4, 1, ',', '') ;
    // 4.3 le resultat est bon
    Ton problème ne serait pas plutôt mathématique ? Une moyenne de moyenne ce n'est pas la moyenne du tout.

    Au passage quand même, utilise un tableau c'est plus propre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $data= array(2.5, 3.2, 4.7, 6.8);
    $moyenne = array_sum($data) / count($data);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  15. #15
    Invité
    Invité(e)
    Par défaut
    Bonjour Sabotage, peux tu réessayer ton exemple mais en en attribuant un nombre entier à une de tes 4 moyennes, c'est là je crois que ça bogue, additioner entier et décimales

  16. #16
    Invité
    Invité(e)
    Par défaut
    Et une moyenne de moyennes est bel et bien une moyenne, à condition que les moyennes ne soient pas arrondies

  17. #17
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Non comme j'ai dit plus haut il n'y a pas de problème à additionner des int et des float.
    (tu pouvais faire le test toi même).

    Tu ne nous as toujours pas dit quel était précisément ton problème.
    Quelles valeurs utilises-tu ? Quel résultat obtiens-tu ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  18. #18
    Invité
    Invité(e)
    Par défaut
    Le problème est peut-être dans mon code qui précède, voici la valeur des moyennes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $moyenne1 = number_format($total_calcul_vote1/$total_vote, 1, ',', '');
    	$moyenne2 = number_format($total_calcul_vote2/$total_vote, 1, ',', '');
    	$moyenne3 = number_format($total_calcul_vote3/$total_vote, 1, ',', '');
    	$moyenne4 = number_format($total_calcul_vote4/$total_vote, 1, ',', '');
    	$moyenne5 = number_format($total_calcul_vote5/$total_vote, 1, ',', '');
    	$moyenne6 = number_format($total_calcul_vote6/$total_vote, 1, ',', '');
    	$moyenne7 = number_format($total_calcul_vote7/$total_vote, 1, ',', '');
    	$moyenne8 = number_format($total_calcul_vote8/$total_vote, 1, ',', '');
    	$moyenne9 = number_format($total_calcul_vote9/$total_vote, 1, ',', '');
    	$moyenne10 = number_format($total_calcul_vote10/$total_vote, 1, ',', '');
    	$moyenne11 = number_format($total_calcul_vote11/$total_vote, 1, ',', '');
    	$moyenne12 = number_format($total_calcul_vote12/$total_vote, 1, ',', '');

  19. #19
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Enlève tous ces number_format().
    Cette fonction sert à afficher un nombre, pas à faire des calculs.
    Et pitié sert toi de tableau comme je t'ai montré.

    Es-tu sur de vouloir faire une moyenne de moyenne ? ce n'est pas plutôt la moyenne de l'ensemble que tu veux ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  20. #20
    Invité
    Invité(e)
    Par défaut
    lol désolé pour ma façon d'écrire sans tableaux, c'est pour mieux visualiser le tout car je ne suis pas encore à l'aise

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/03/2015, 14h22
  2. [MySQL] calcul avec php
    Par pitchoblack dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 27/02/2011, 12h29
  3. Problème avec les Calculs mathématiques
    Par gibea00 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 19/04/2008, 20h37
  4. [PHP-JS] calculs mathématiques avancés en php
    Par jejerome dans le forum Langage
    Réponses: 8
    Dernier message: 12/07/2006, 13h05
  5. calculs mathématiques avec des "racines)
    Par emmanuel4945 dans le forum Access
    Réponses: 1
    Dernier message: 30/01/2006, 21h40

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