2つの数字があります。最初のは元の価格、秒は割引価格です。
ユーザーが2番目の価格で購入した場合、ユーザーが何パーセント節約するかを計算する必要があります。
example
25, 10 = 60%
365, 165 = 55%
私が知らないのは、これを計算する式です。
私はこれがかなり古いことを知っていますが、これはこれを置くために他のものと同じくらい良いと思いました。良い説明のあるyahooからの投稿を見つけました。
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%
例えば:
((25 - 10) / 25) * 100% = 60%
式は(original - discounted)/original
。つまり、(365-165)/ 365 = 0.5479 ...
function calculatePercentage($oldFigure, $newFigure)
{
$percentChange = (($oldFigure - $newFigure) / $oldFigure) * 100;
return round(abs($percentChange));
}
これは非常に古い質問であることがわかりますが、これは2つの数値の割合の差を計算する方法です。
(1 - (oldNumber / newNumber)) * 100
したがって、30から40へのパーセンテージの差は次のとおりです。
(1 - (30/40)) * 100 = +25% (meaning, increase by 25%)
40から30の割合の差は次のとおりです。
(1 - (40/30)) * 100 = -33.33% (meaning, decrease by 33%)
PHPでは、次のような関数を使用します。
function calculatePercentage($oldFigure, $newFigure) {
if (($oldFigure != 0) && ($newFigure != 0)) {
$percentChange = (1 - $oldFigure / $newFigure) * 100;
}
else {
$percentChange = null;
}
return $percentChange;
}
100%-割引価格/定価
これは反転オプション付きの機能です
戻ります:
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 );
}