Pretty cool stuff for pretty cool people.

Menu

PHP: Calculate the percent difference between two numbers.

This is a small guide on how to calculate the percentage difference between two numbers in PHP. For example, if your original number is 12.50 and you increase it to 14.12; what is the percentage change? i.e. By what percent did it increase by?

Let’s say that we are working on an eCommerce solution for a business that is selling hats online. The owner wants to be able to specify a “special price”. i.e. A reduced price. Whenever a special price has been applied against a product, we need to be able to show the old price, the new price and the percent change (22% cheaper, etc).

Here is an example:

PHP

1

2

3

4

5

6

7

8

<?php

$oldFigure=14;

$newFigure=12.50;

$percentChange=(1-$oldFigure/$newFigure)*100;

echo$percentChange;

If you run the PHP code above, you’ll see that the price dropped by -12%.

Here is another example. This time, we are showing how much it increased by:

PHP

1

2

3

4

5

6

7

8

<?php

$oldFigure=14;

$newFigure=17;

$percentChange=(1-$oldFigure/$newFigure)*100;

echo$percentChange;

The result is: 17.647058823529% increase.

“I don’t want to show all of the decimal places.”

In cases where you only want to show 2 decimal places, you can use the function number_format:

1

2

3

4

5

6

7

8

<?php

$oldPrice=14;

$newPrice=17;

$percentChange=(1-$oldPrice/$newPrice)*100;

echo number_format($percentChange,2);

Run the code above and you’ll see that our figure has been formatted into 17.65%.

“I’m getting a minus percentage number.”

When you’re wanting to show a percent drop in price, a minus percentage figure might not be what you’re looking for. Example: You want to print out the text “12% drop in price!” or “Reduced by 5%!” In those cases, a minus percentage number will not work. In those cases, you can simply use the abs function, which converts numbers into absolute numbers:

PHP

1

2

3

4

5

6

7

8

<?php

$oldFigure=14;

$newFigure=10;

$percentChange=(1-$oldFigure/$newFigure)*100;

echoabs($percentChange);

The code above will convert -17.647058823529 into 17.647058823529.

“I don’t want any decimal places.”

If you want to remove the decimal point completely, you can use the round function:

PHP

1

2

3

4

5

6

7

8

<?php

$oldFigure=14;

$newFigure=17;

$percentChange=(1-$oldFigure/$newFigure)*100;

echoround($percentChange,0);

The PHP above will output the number 18, simply because 17.647058823529 has been rounded up.