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 d'une hausse ou baisse en pourcentage


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut calcul d'une hausse ou baisse en pourcentage
    Bonjour à tous,

    N'étant pas très douer en math plus ou moins avancé, je me dirige vers vous, je vous explique.

    Dans le cadre de notre activité, j'ai du tonnage
    2005 => 72 Tonne
    2006 => 315 Tonne
    2007 => 282 Tonne

    Je doit créer un pourcentage de baisse ou de hausse
    Ma question est donc, comment calculer le pourcentage de hausse entre 2005 et 2006 et le pourcentage de baisse entre 2006 et 2007

    J'ai bien sur un tableau php qui contient tous mes chiffres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php
    $tonne = array('2005'=>72, '2006'=>315, '2007'=>282,etc...); // Bon ok etc... n'est pas une syntaxe correct lol ;)
    ?>
    mon objectif est d'obtenir un second tableau via une boucle sur le premier
    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
     
    <?php
    $evo = array();
    foreach($tonne as $y => $size){
        if(!isset($tonne[$y-1]){ 
            // C'est la première valeur donc pas de formule
            $evo[$y] = 0; // 0% puisque première année
        }
        else{
            if($tonne[$y-1] < $tonne[$y]){
                // C'est une augmentation par rapport à l'année précédente
                $evo[$y] = Résultat de la formule exprimée en % ??
            }
            else{
                // C'est une baisse par rapport à l'année précédente
                $evo[$y] = Résultat de la formule exprimée en % ??
            }
        }
    }
    Voilà, je ne sais pas si je suis assez clair sinon n'hésitez pas à me poser des question.

    D'avance merci de votre participation.

    Bien à vous
    Spliffer

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur SQL
    Inscrit en
    Novembre 2014
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur SQL
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2014
    Messages : 15
    Points : 52
    Points
    52
    Par défaut
    Une des formules que tu peux utiliser est (TONNAGE ANNEE EN COURS – TONNAGE ANNEE PRECENDENTE) / TONNAGE ANNEE PRECEDENTE.

    Pour l’évolution entre 2006 et 2007 ça donnerai (282 – 315) / 315 = -0.10476 puis en multipliant par 100 tu obtiens -10.48 %.

    Donc pas besoin de tester si Y est plus grand ou plus petit que Y – 1, cette formule retourne un nombre positif ou négatif selon le cas.

    Je suis moi-même une bille en math donc il existe certainement une meilleure façon de faire.

  3. #3
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    On peut faire seulement (TONNAGE ANNEE EN COURS / TONNAGE ANNEE PRECEDENTE) - 1
    Ca revient au même.

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    274
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 274
    Points : 114
    Points
    114
    Par défaut
    Bonjour à vous,

    Merci pour votre participation, en me basant sur ce que vous m'écrivez j'ai créer une fonction.
    l'intérêt de vérifier si la valeur précédente est inférieur ou supérieur est d'éviter le symbole - (moins) en cas de valeur négative, car la direction ne veux pas de + ou de - elle veut une flèche UP ou DOWN

    Voici donc ma fonction qui format le nombre en 2 chiffre après la virgule.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    /**
     * Fonction retournant une évolution entre deux chiffre sans spécification de négativité ou positivité
     * $num1 = chiffre le plus élevé
     * $num2 = chiffre le plus bas
     * return : Retourne un pourcentage toujours positif sans spécification et formater
    **/
    function evoPercentNoSpec($num1=0,$num2=0){
        $r = ( ($num1 - $num2) / $num2) * 100;
        return number_format($r, 2, ",", " ");
    }
    ?>
    Je n'ai donc plus qu'a faire ma routine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <?php
    $evo = array();
    foreach($tonne as $y => $size){
        if(!isset($tonne[$y-1])){ $evo[$y] = 'Permière donnée'; }
        else{
            $evo[$y] = ($tonne[$y-1] < $tonne[$y]) ? '<img src="up.gif" /> ' : '<img src="down.gif" /> ';
            $num1 = ($tonne[$y-1] < $tonne[$y]) ? $tonne[$y] : $tonne[$y-1];
            $num2 = ($tonne[$y-1] > $tonne[$y]) ? $tonne[$y] : $tonne[$y-1];
            $evo[$y] .= evoPercentNoSpec($num1,$num2) . ' %';
        }
    }
    ?>
    Donc vos idées m'ont dirigé vers la bonne voie :p Merci beaucoup
    Aillant atteint l'objectif souhaité, je met le sujet en résolu

    Bien à vous
    Spliffer

  5. #5
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Plus simplement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $evo = array();
     
    foreach($tonne as $y => $size){
        if(!isset($prev_size)) { $evo[$y] = 'Première donnée'; }
        else{
            $evolution = ($size /  $prev_size) - 1;
            $arrow = $evolution <= 0 ? 'down' : 'up';
     
            $evo[$y] = '<img src="' . $arrow . '.gif" />' . number_format(abs($evolution) * 100, 2, ",", " ") . ' %';
        }
        $prev_size = $size;
    }
    ?>
    En n'utilisant pas y-1 on évite le problème d'un trou de date dans le tableau.

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

Discussions similaires

  1. [AC-2010] Pourcentage et calcul dans une requete
    Par natloo dans le forum Access
    Réponses: 1
    Dernier message: 13/03/2013, 09h22
  2. calcul d'une variation en pourcentage
    Par oliver75 dans le forum Excel
    Réponses: 2
    Dernier message: 11/07/2007, 14h11
  3. Réponses: 10
    Dernier message: 13/06/2006, 17h59
  4. Recuperer un champ calculé dans une variable....
    Par vijeo dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 21/12/2004, 14h57
  5. calcul dans une requête
    Par blaz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 22/12/2003, 10h31

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