Math Runs locally Ready to use Built-in examples No tracking

Percentage Change Calculator

Four modes covering percent change: rate between two values, applying a percentage change, reversing it, and compound annual growth rate.

"How much did it change?" is the most common percentage question and one of the most frequently botched: a 20% fall needs a 25% rise to recover, not another 20%. Four modes cover the whole family — the change between two values, a value after a percentage increase or decrease, the original value behind a changed one, and compound growth over several periods.

The asymmetry is the interesting part: going from 100 to 80 is a 20% fall, but going back from 80 to 100 is a 25% rise, because the base changed. Compound annual growth is a geometric mean — (end ÷ start)^(1/years) − 1 — and averaging the yearly rates arithmetically will overstate the result. The mode in use is labelled, so the base of the calculation is never a guess.

How to use

  1. Pick a mode: change between two values, increase or decrease, reverse from the new value, or compound growth.
  2. Enter the values and read the result.
  3. Note which value is the base — the same figures give different answers the other way round.
  4. For multi-year growth, use the compound mode rather than averaging the yearly rates.

How it works

Choosing among the four modes

"Change rate" computes the rise or fall from a start value to an end value; "after change" applies a percentage increase or decrease to a value; "solve original" works backwards from the changed value and the percent; "compound growth" gives the average per-period growth over several periods. Switching modes swaps the input fields to match.

How the change rate is computed

Change rate = (end − start) ÷ |start| × 100%. The absolute value in the denominator keeps direction in the sign alone: going from −100 to −50 is a 50% rise, not a fall.

When you need to solve back for the original value

"Solve original" is the bill-checking tool: if an item rose 15% and now costs 230, then 230 ÷ 1.15 gives the original 200. Multiplying 230 by 85% to get 195.5 is wrong — the most common percentage misuse.

Compound vs. average growth rate

Compound growth assumes the same proportional rise each period: growth per period = (final ÷ initial)^(1 ÷ periods) − 1. It differs from the arithmetic "total growth ÷ periods" because each period's gain rolls into the next period's base.

Code example

JavaScript Four modes, one function each

const pctChange = (from, to) => (to - from) / Math.abs(from) * 100;
const applyPct = (v, p) => v * (1 + p / 100);
const reversePct = (after, p) => after / (1 + p / 100);
const cagr = (begin, end, years) =>
  (Math.pow(end / begin, 1 / years) - 1) * 100;

pctChange(100, 80);        // -20 (a 20% fall)
reversePct(80, -20);       // 100
pctChange(80, 100);        // 25 (it takes 25% to climb back)
cagr(100, 121, 2);         // 10 (10% a year)

Python The same four modes in Python

pct_change = lambda a, b: (b - a) / abs(a) * 100
apply_pct = lambda v, p: v * (1 + p / 100)
reverse_pct = lambda after, p: after / (1 + p / 100)
cagr = lambda b, e, y: ((e / b) ** (1 / y) - 1) * 100

pct_change(100, 80)    # -20.0
cagr(100, 121, 2)      # 10.0

FAQ

Why divide by the absolute value of the start?

So that direction is decided only by the numerator's sign (end − start) while the denominator stays positive. Example: from −100 to −50 the number grew (a rise); using the signed −100 as denominator would yield −50%, which reads as a fall — the opposite of intuition.

When is "solve original" useful?

Anywhere you see a marked-up price and want the original: a tag reads "up 15%, now 230". Remember not to restore with "230 × (1 − 15%)", which gives 195.5; the correct move is 230 ÷ 1.15 = 200.

Compound growth rate vs. average growth rate — what's the difference?

The average rate is the arithmetic "total growth ÷ periods", ignoring compounding; the compound rate (CAGR) is the geometric mean, assuming the same proportional rise each period. Growing 100 into 200 over two years is 50% per year arithmetically, but only 41.42% per year compounds correctly, because the second year's base is already larger.

Up 100% then down 50% — why back to the start?

Because the bases differ: 100 up 100% becomes 200; 200 down 50% returns to 100. Percent changes are always relative to the current base, so equal percent moves don't cancel — the same reason "down 50% then up 50%" only gets you back to 75%.

Why can't the change rate be computed from a start of 0?

The denominator is the start value, and 0 cannot be a denominator. Growing from 0 to anything is mathematically an infinite rate — meaningless. Use the "after change" mode instead, or describe it with an absolute change.

Can the percentage be negative?

Yes. In "after change" and "solve original" modes a positive number increases and a negative number decreases — −15 means down 15%. But −100% zeroes the denominator when solving backwards, and the tool will report division by zero.

How many decimals does the result keep?

Ten significant digits, with float tail error trimmed automatically — 200 up 15% shows 230, not 229.99999999999997. Need more? Use the copy button beside the result to grab the raw value.

Are my prices and revenue data uploaded?

No. All computation happens in local browser scripts; the server only delivers the page, and no input is written to any cloud endpoint. History lives solely in your browser's localStorage — clear it from the history panel at any time.