Calculate percentage saved between two numbers?

MathFormula

Math Problem Overview


I have two numbers, the first, is the original price, the second, is the discounted price.

I need to work out what percentage a user saves if they purchase at the second price.

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

What I dont know is the formula to calculate this.

Math Solutions


Solution 1 - Math

I know this is fairly old but I figured this was as good as any to put this. I found a post from yahoo with a good explanation:

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

Solution 2 - Math

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

For example:

((25 - 10) / 25) * 100% = 60%

Solution 3 - Math

I see that this is a very old question, but this is how I calculate the percentage difference between 2 numbers:

(1 - (oldNumber / newNumber)) * 100

So, the percentage difference from 30 to 40 is:

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

The percentage difference from 40 to 30 is:

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

In php, I use a function like this:

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

Solution 4 - Math

The formula would be (original - discounted)/original. i.e. (365-165)/365 = 0.5479...

Solution 5 - Math

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

Solution 6 - Math

100% - discounted price / full price

Solution 7 - Math

I have done the same percentage calculator for one of my app where we need to show the percentage saved if you choose a "Yearly Plan" over the "Monthly Plan". It helps you to save a specific amount of money in the given period. I have used it for the subscriptions.

> Monthly paid for a year - 2028 > Yearly paid one time - 1699 > > 1699 is a 16.22% decrease of 2028. > > Formula: Percentage of decrease = |2028 - 1699|/2028 = 329/2028 = 0.1622 > = 16.22%

Code:

func calculatePercentage(monthly: Double, yearly: Double) -> Double {
    let totalMonthlyInYear = monthly * 12
    let result = ((totalMonthlyInYear-yearly)/totalMonthlyInYear)*100
    print("percentage is -",result)
    return result.rounded(toPlaces: 0)
}

Usage:

 let savingsPercentage = self.calculatePercentage(monthly: Double( monthlyProduct.price), yearly: Double(annualProduct.price))
 self.btnPlanDiscount.setTitle("Save \(Int(savingsPercentage))%",for: .normal)

The extension usage for rounding up the percentage over the Double:

extension Double {
/// Rounds the double to decimal places value
func rounded(toPlaces places:Int) -> Double {
    let divisor = pow(10.0, Double(places))
    return (self * divisor).rounded() / divisor
   }
}

I have attached the image for understanding the same:

Percentage Calc - Subscription

Solution 8 - Math

If total no is: 200 and getting 50 number

then take percentage of 50 in 200 is:

(50/200)*100 = 25%

Solution 9 - Math

This is function with inverted option

It will return:

  • 'change' - string that you can use for css class in your template
  • 'result' - plain result
  • 'formatted' - formatted result

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 );
}

Solution 10 - Math

I think this covers this formula sufficiently,

((curr value - base value) / (curr value)) * 100%

Basically we just (in programming):

  • perform the calculation if both numbers are not 0.
  • If curr value is 0 then we return -100 % difference from the base,
  • if both are 0 then return 0 (we can't divide by 0)

Powershell example:

Strip any non numeric from vars and perform calculation

Function Get-PercentageSaved {
    #((curr value - base value) / (curr value)) * 100%
    param(
        [Parameter(Mandatory = $false)][string]$CurrVal = $null,
        [Parameter(Mandatory = $false)][string]$BaseVal = $null
    )
    $Result = $null
    Try {

        $CurrVal = [float]($CurrVal -replace '[^0-9.]', '')
        $BaseVal = [float]($BaseVal -replace '[^0-9.]', '')

        if (-Not($null -eq $CurrVal) -And (-Not($null -eq $BaseVal))) {
            if ($CurrVal -eq 0) {
                If ($BaseVal -eq 0) {
                    $Result = 0
                } Else {
                    $Result = -100
                }
            }
            else {
                $Result = [math]::Round([float]((($CurrVal - $BaseVal) / $CurrVal) * 100),2)
            }
        }
    }
    Catch {}
    Return [float]$Result
}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHailwoodView Question on Stackoverflow
Solution 1 - Mathcking24343View Answer on Stackoverflow
Solution 2 - MathAndy WhiteView Answer on Stackoverflow
Solution 3 - MathNeelView Answer on Stackoverflow
Solution 4 - MathRandom832View Answer on Stackoverflow
Solution 5 - MathnikmauroView Answer on Stackoverflow
Solution 6 - MathIgnacio Vazquez-AbramsView Answer on Stackoverflow
Solution 7 - MathHarjot SinghView Answer on Stackoverflow
Solution 8 - MathZahid GaniView Answer on Stackoverflow
Solution 9 - MathSayonaraView Answer on Stackoverflow
Solution 10 - MathMike QView Answer on Stackoverflow