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.
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.
((list price - actual price) / (list price)) * 100%
Par exemple:
((25 - 10) / 25) * 100% = 60%
La formule serait (original - discounted)/original
. c'est-à-dire (365-165)/365 = 0,5479 ...
function calculatePercentage($oldFigure, $newFigure)
{
$percentChange = (($oldFigure - $newFigure) / $oldFigure) * 100;
return round(abs($percentChange));
}
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;
}
100% - prix réduit/plein prix
C'est fonction avec option inversée
Il reviendra:
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 );
}