Percent Change Calculator
The percent change calculator finds the percentage change between an initial and a final value, with the sign showing a rise or a fall. It also covers the percent change formula, calculating changes in percentages, negative starts and worked examples.
Example values are filled in. Replace them with your own.
Percentage change
+15%
Increase
Working
- 9200 − 8000 = 1200
- 1200 ÷ 8000 × 100 = 15%
- Absolute change
- 1200
- Base used (the absolute starting value)
- 8000
- Change needed to get back to the start
- -13.04%
Percentage change divides by the absolute value of the starting value, so a move from −50 to −25 is +50%, an increase.
This is a relative change, a share of the starting value. If both values are rates, the gap between them is measured in percentage points, a different measure. See the percentage points calculator.
A share price falls from $80 to $68, or a website's visits jump from 5,000 to 20,000. How big was the move, and in which direction? A raw difference of $12 or 15,000 visits cannot be compared across different starting points. Percent change can.
Enter the initial value and the final value into this percent change calculator and it returns the percentage change, labelled as an increase or a decrease, with every step of the working shown. It also handles negative starting values and says which convention it used, so you can check the answer against your own.
How percentage change works
Quick answer: subtract the initial value from the final value, divide by the initial value and multiply by 100. A positive result is an increase and a negative result is a decrease. From 80 to 68 that is (68 − 80) ÷ 80 × 100 = −15%.
What is percentage change?
Percentage change measures how much a value moved, as a share of where it started. Unlike the percentage increase calculator and the percentage decrease calculator, which each handle one direction, this percentage change calculator covers both and carries the direction in its sign.
Percentage change formula
percentage change = (final value - initial value) / abs(initial value) * 100This is the percent change formula in full, and the formula for calculating percentage change is the same for any unit, whether money, mass, people or visits, because the units cancel in the division. The absolute value bars matter only when the initial value is negative.
How to calculate percentage change
- Subtract the initial value from the final value to get the change.
- Divide the change by the initial value, not the final value.
- Multiply by 100 and keep the sign: plus for an increase, minus for a decrease.
Here is how to calculate percentage change between two numbers: the one that happened first is always the initial value. When calculating percent change, swapping them changes the answer: 80 to 100 is +25%, but 100 to 80 is −20%.
Finding the new value from a percent change
If you know the percent change and want the final value, run the formula backwards: final value = initial value × (1 + percent change ÷ 100). A price of $250 with a −12% change becomes 250 × 0.88 = $220, and a 40% rise on 60 gives 60 × 1.40 = 84. Running the change percentage calculation in reverse is the same as adding or subtracting a percent. The percentage increase calculator covers rises in more detail.
Percentage change between negative numbers
When the initial value is negative, the calculator divides by its absolute value, so the sign of the result matches the direction of the move. Going from −50 to −25 is +50%, because the value rose by 25. Going from −20 to −30 is −50%, because it fell by 10. This is a convention. A plain (new − old) ÷ old formula, as typed in Excel, returns −50% for the first move, the opposite sign to the direction of the change. The calculator uses the absolute start and says so beside the result, so you can match it to your own. If the value crosses zero, such as −10 to 20, the formula gives +300%, but the absolute change of 30 is usually the more honest figure.
Calculating changes in percentages
When the values are themselves percentages, the formula is unchanged but the wording matters. A rate moving from 40% to 50% is a 10 percentage point change and a 25% relative change: (50 − 40) ÷ 40 = 0.25. Say which one you mean. The percentage points guide covers the difference.
Why a change is not symmetric
A 50% rise followed by a 50% fall does not return you to the start: 100 becomes 150, then 75. To recover from a 50% fall you need a 100% rise. This is because each change uses a different base.
When percent change misleads
A small base produces dramatic percentages. Going from 1 to 3 is a 200% increase, while going from 1,000 to 1,030 is 3%, even though the first gain is 2 units and the second is 30. To judge a move like that fairly, report it alongside the absolute change and name the base. Over many periods, do not average the yearly percentages; chain them as shown below.
Chaining changes: how to multiply percentages
To combine successive changes, convert each to a factor (1 plus the change as a decimal) and multiply. A 20% rise then a 10% fall is 1.20 × 0.90 = 1.08, which is a net 8% rise, not 10%. Multiplying percentages this way also gives compound growth: three rises of 10% make 1.10³ = 1.331, or 33.1%.
Percentage change vs percentage difference
Use percentage change when one value came first and the other is the result. Use percentage difference when two values are peers with no natural start, such as the prices of the same item in two shops. The percentage difference calculator divides by the average of the two values, so the order does not matter.
Population growth and other real-world uses
A population growth rate is the percent change in headcount over a period. A town growing from 48,000 to 50,400 people has grown by 2,400 ÷ 48,000 = 5%. Year-over-year, annual and monthly growth are the same calculation on figures a period apart. Economics (GDP, CPI), biology (mass change in osmosis experiments) and business (sales, profit) all use this percentage change formula.
Percentage change examples
Quick reference for small whole-number moves:
| From | To | Change | Percent change |
|---|---|---|---|
| 5 | 20 | +15 | +300% |
| 20 | 10 | −10 | −50% |
| 2 | 3 | +1 | +50% |
| 5 | 4 | −1 | −20% |
Example 1: share price from $80 to $68
Given
Step 1
The change is 68 − 80 = −12.Step 2
Divide by the initial price: −12 ÷ 80 = −0.15.
Answer
Example 2: website visits from 5,000 to 20,000
Given
Step 1
The change is +15,000, and 15,000 ÷ 5,000 = 3.
Answer
Example 3: percentage change in mass, 12.5 g to 11.2 g
Given
Step 1
The sample lost 1.3 g.Step 2
Divide by the starting mass: −1.3 ÷ 12.5 = −0.104.
Answer
Example 4: year-over-year revenue, $1.8 million to $2.25 million
Given
Step 1
The change is +$0.45 million, and 0.45 ÷ 1.8 = 0.25.
Answer
Example 5: negative values, −50 to −25
Given
Step 1
The change is +25 and the absolute initial value is 50, so 25 ÷ 50 = 0.5.
Answer
Example 6: why the order matters, 20 and 30
Given
Step 1
From 20 to 30 is +10 ÷ 20 = +50%.Step 2
From 30 to 20 is −10 ÷ 30 = −33.3%.
Answer
Percentage change code
Both versions reproduce the examples above (+300%, −50%, +50%, −20%, −15%, −10.4%, +25%), use the absolute initial value for negative starts and refuse a starting value of 0.
JavaScript
function finite(name, v) { if (typeof v !== "number" || !Number.isFinite(v)) throw new TypeError(`${name} must be a finite number`);}export function percentChange(initial, final) { finite("initial", initial); finite("final", final); if (initial === 0) throw new RangeError("initial must not be 0: the change from zero is undefined"); const percent = ((final - initial) / Math.abs(initial)) * 100; const direction = percent > 0 ? "increase" : percent < 0 ? "decrease" : "no change"; return { percent, direction };}export function chainChanges(...percents) { percents.forEach((p, i) => finite(`percents[${i}]`, p)); return (percents.reduce((factor, p) => factor * (1 + p / 100), 1) - 1) * 100;}Python
from decimal import Decimalimport mathdef _num(name, v): if isinstance(v, bool) or not isinstance(v, (int, float, Decimal)) or not math.isfinite(float(v)): raise ValueError(f"{name} must be a finite number") return Decimal(str(v))def percent_change(initial, final): initial, final = _num("initial", initial), _num("final", final) if initial == 0: raise ValueError("initial must not be 0: the change from zero is undefined") percent = (final - initial) / abs(initial) * 100 direction = "increase" if percent > 0 else "decrease" if percent < 0 else "no change" return percent, directiondef chain_changes(*percents): factor = Decimal(1) for i, p in enumerate(percents): factor *= 1 + _num(f"percents[{i}]", p) / 100 return (factor - 1) * 100chainChanges(20, -10) returns 8 once rounded for display, the net rise from the chaining example, and chainChanges(50, -50) returns −25, the 100 to 75 case. Round only for display.
Privacy and input safety
Values are calculated in your browser. The numbers you enter are not sent to a server or stored.
- Fields accept numbers only. Text, empty fields, NaN and Infinity are rejected with a message, and nothing you type is ever evaluated as code.
- A starting value of 0 returns a clear message instead of a division error, because a percent change from zero is undefined. The absolute change is still shown.
- A comma followed by exactly three digits is read as a thousands separator, so 1,200 is 1200. Any other comma is a decimal point, so 12,50 is 12.50, and a number starting with 0, such as 0,500, is read as a decimal. Mixed formats such as 1.234,5 and ambiguous entries such as 1,2,3 are refused instead of guessed. Spaces, including no-break spaces, between digit groups are ignored.
Common percentage change mistakes
| Mistake | What goes wrong | What the calculator does |
|---|---|---|
| Dividing by the final value | 80 to 100 gives 20% instead of 25% | Always divides by the initial value |
| Dropping the sign | A fall from 80 to 68 reported as "15%", read as a rise | Labels the result as an increase or decrease, with sign |
| Adding successive changes | +20% then −10% read as +10%; the true net is +8% | Multiplies the factors |
| Undoing a change with the same percent | A −50% fall needs a +100% rise to recover, not +50% | Shows the base used, so the reverse can be checked |
| Mixing sign conventions on a negative start | −50 to −25 reads +50% by the absolute-start rule and −50% by the signed-start rule | Divides by the absolute value and states the convention |
| Starting from zero | Division by zero, or a meaningless infinite percentage | Refuses with a message and shows the absolute change |
| Reading points as percent | 40% to 50% called a 10% rise; it is 10 points, or 25% relative | Labels the result as relative change |
| Using change when neither value is the start | The answer depends on which number you type first | Offers the percentage difference mode |
| Rounding at each step | The result drifts by a point or more over a chain | Rounds only the displayed result |
Percentage change compared with related measures
| Measure | Formula | Base | Shows direction | Order matters |
|---|---|---|---|---|
| Percentage change | (final − initial) ÷ abs(initial) × 100 | Initial value | Yes, by sign | Yes |
| Percentage increase | The same formula, for rises only | Initial value | Always up | Yes |
| Percentage decrease | (initial − final) ÷ initial × 100 | Initial value | Always down | Yes |
| Percentage difference | abs(a − b) ÷ ((a + b) ÷ 2) × 100 | Average of the two | No | No |
| Percent error | abs(measured − true) ÷ abs(true) × 100 | True value | No | Yes |
| Percentage points | new rate − old rate | Not applicable | Yes, by sign | Yes |
Percentage change is the umbrella measure. Increase and decrease are its two halves, difference is the version with no starting point, and percent error is the version where the starting point is a known true value. Pick by asking which number, if any, is the reference.