web-dev-qa-db-fra.com

Calculer le pourcentage enregistré entre deux nombres?

J'ai deux chiffres, le premier , est le prix d'origine, le deuxième , est le prix réduit.

Je dois déterminer le pourcentage qu'un utilisateur économise s'il achète au deuxième prix. 

example
25, 10 = 60%  
365, 165 = 55%

Ce que je ne connais pas, c'est la formule pour calculer cela.

42
Hailwood

Je sais que c'est assez vieux, mais je me suis dit que c'était aussi bon que tout. J'ai trouvé un post de Yahoo avec une bonne explication:

Let's say you have two numbers, 40 and 30.  

  30/40*100 = 75.
  So 30 is 75% of 40.  

  40/30*100 = 133. 
  So 40 is 133% of 30. 

The percentage increase from 30 to 40 is:  
  (40-30)/30 * 100 = 33%  

The percentage decrease from 40 to 30 is:
  (40-30)/40 * 100 = 25%. 

These calculations hold true whatever your two numbers.

Original Post

107
cking24343
((list price - actual price) / (list price)) * 100%

Par exemple:

((25 - 10) / 25) * 100% = 60%
27
Andy White

La formule serait (original - discounted)/original. c'est-à-dire (365-165)/365 = 0,5479 ...

8
Random832
    function calculatePercentage($oldFigure, $newFigure)
{
    $percentChange = (($oldFigure - $newFigure) / $oldFigure) * 100;
    return round(abs($percentChange));
}
3
nikmauro

Je vois que c'est une très vieille question, mais voici comment je calcule la différence en pourcentage entre 2 chiffres:

(1 - (oldNumber / newNumber)) * 100

Ainsi, la différence en pourcentage de 30 à 40 est la suivante:

(1 - (30/40)) * 100 = +25% (meaning, increase by 25%)

La différence en pourcentage de 40 à 30 est de:

(1 - (40/30)) * 100 = -33.33% (meaning, decrease by 33%)

En php, j'utilise une fonction comme celle-ci:

function calculatePercentage($oldFigure, $newFigure) {
        if (($oldFigure != 0) && ($newFigure != 0)) {
            $percentChange = (1 - $oldFigure / $newFigure) * 100;
        }
        else {
            $percentChange = null;
        }
        return $percentChange;
}
3
Neel

100% - prix réduit/plein prix

3

C'est fonction avec option inversée 

Il reviendra:

  • 'change' - chaîne que vous pouvez utiliser pour la classe css dans votre modèle
  • 'résultat' - résultat en clair 
  • 'formaté' - résultat formaté

function getPercentageChange( $oldNumber , $newNumber , $format = true , $invert = false ){

    $value      = $newNumber - $oldNumber;

    $change     = '';
    $sign       = '';

    $result     = 0.00;

    if ( $invert ) {
         if ( $value > 0 ) {
        //  going UP
            $change             = 'up';
            $sign               = '+';
            if ( $oldNumber > 0 ) {
                $result         = ($newNumber / $oldNumber) * 100;
            } else {
                $result     = 100.00;
            }

        }elseif ( $value < 0 ) {        
        //  going DOWN
            $change             = 'down';
            //$value                = abs($value);
            $result             = ($oldNumber / $newNumber) * 100;
            $result             = abs($result);
            $sign               = '-';

        }else {
        //  no changes
        }

    }else{

        if ( $newNumber > $oldNumber ) {

            //  increase
            $change             = 'up';

            if ( $oldNumber > 0 ) {

                $result = ( ( $newNumber / $oldNumber ) - 1 )* 100;

            }else{
                $result = 100.00;
            }

            $sign               = '+';

        }elseif ( $oldNumber > $newNumber ) {

            //  decrease
            $change             = 'down';

            if ( $oldNumber > 0 ) {

                $result = ( ( $newNumber / $oldNumber ) - 1 )* 100;

            } else {
                $result = 100.00;
            }

            $sign               = '-';

        }else{

            //  no change

        }

        $result = abs($result);

    }

    $result_formatted       = number_format($result, 2);

    if ( $invert ) {
        if ( $change == 'up' ) {
            $change = 'down';
        }elseif ( $change == 'down' ) {
            $change = 'up';
        }else{
            //
        }

        if ( $sign == '+' ) {
            $sign = '-';
        }elseif ( $sign == '-' ) {
            $sign = '+';
        }else{
            //
        }
    }
    if ( $format ) {
        $formatted          = '<span class="going '.$change.'">'.$sign.''.$result_formatted.' %</span>';
    } else{
        $formatted          = $result_formatted;
    }

    return array( 'change' => $change , 'result' => $result , 'formatted' => $formatted );
}
0
Sayonara