Percent Change Calculator

Find the percent change between an old and a new value — signed, with an increase or decrease label — plus the absolute change, the symmetric percent difference, and the Excel, Sheets, and SQL formulas.

Runs in your browser — your numbers are never sent

Calculate percent increase, decrease, and change in Excel and SQL

Decimals: use a period or a comma — 99.5 or 99,5.

Percent change
Absolute change
Percent difference
symmetric — order doesn’t matter

What percent change tells you, and how it differs from percent difference

Percent change measures how much a value moved from an old, starting figure to a new one, as a share of that starting value. The formula is (new − old) / |old| × 100: subtract the old value from the new to get the raw change, then divide by the old value — the reference you are measuring against — to turn it into a percentage you can compare across quantities of different sizes. The result is signed, and the sign is the whole point: a positive answer is a percent increase, a negative answer is a percent decrease, and zero means no change. Percent increase, percent decrease, and percent change are not three different calculations — they are one formula, and the sign is the label. A change above 100% is perfectly valid: from 25 to 75 is +200%, because the value tripled.

This calculator returns three numbers at once. The headline is the signed percent change with an increase or decrease word, so you never have to guess the direction. Below it sits the absolute change — the plain gap in the inputs' own units (new − old), useful when the amount matters more than the ratio. The third figure, clearly labelled, is the percent difference: a related but different metric that divides by the average of the two values instead of by the old one, so it is always positive and symmetric — swapping the two inputs gives the same answer. Percent change answers 'how much did this value move'; percent difference answers 'how far apart are these two numbers'. Keeping the absolute value in the percent-change denominator is what keeps the sign honest when the old value is negative: from −50 to −40 the value rose, and |old| makes it read as +20% (an increase) rather than a misleading −20%.

The one case with no answer is an old value of zero: there is no base for the change to be a percentage of, so percent change is genuinely undefined — not zero, not infinity — and the calculator says so while still showing the absolute change, which stays valid. Everything runs in your browser: no upload, no account, no server round-trip, and the inputs accept both US (1,234.56) and European or Spanish (1.234,56 or 99,5) number formats. Below the calculator you'll find the exact Excel and Google Sheets formulas, a divide-by-zero-safe SQL query for computing percent change across a whole column, and a table that separates percent change from the two metrics people most often confuse it with — percent difference and percent error, the subject of its sibling calculator.

One trap worth naming: a percent change is not the same as a change in percentage points. If a rate goes from 10% to 15%, that is a 5 percentage-point rise but a +50% change relative to the starting 10% — both are correct, and mixing them up is one of the most common reporting errors in analytics. Use percentage points when the values are themselves percentages (interest rates, conversion rates, market share) and you want the raw gap; use percent change when you want the movement relative to where it started.

Percent changes also do not cancel out, because each is measured against a different base. A value that rises 50% and then falls 50% does not return to where it began: 100 → 150 → 75, a net 25% loss. That asymmetry is why a stock down 50% needs a 100% gain to recover, and why averaging percent changes across periods misstates the true compound result — for a run of consecutive changes you multiply the growth factors (1.5 × 0.5 = 0.75) rather than adding the percentages. When you need the average growth rate over many periods, that is CAGR, a natural next tool in this cluster.

In Excel and Google Sheets

Put the old (initial) value in cell A2 and the new (final) value in B2. These formulas are identical in Microsoft Excel and Google Sheets. The absolute value on the denominator, ABS(A2), keeps the sign correct when the old value is negative — and, unlike percent error, the numerator (B2-A2) is NOT wrapped in ABS, so the result stays signed.

Percent change as a decimal — then format the cell as Percentage:
=(B2-A2)/ABS(A2)

Percent change as a plain number where 50 means 50%:
=(B2-A2)/ABS(A2)*100

Absolute change (same units, signed):
=B2-A2

Increase / decrease / no change label:
=IF(B2>A2,"increase",IF(B2<A2,"decrease","no change"))

Percent difference (symmetric secondary metric), Percentage-formatted:
=ABS(A2-B2)/ABS((A2+B2)/2)
Core formulas. A2 = old value, B2 = new value.

Watch the formatting: if the cell is formatted as Percentage, Excel and Sheets already multiply the stored value by 100 for display, so use =(B2-A2)/ABS(A2) and do NOT also multiply by 100 — otherwise +50% shows as +5000%. Multiply by 100 only when you leave the cell as a General or Number format.

  1. Type the old value in A2 and the new value in B2.
  2. In C2 enter =(B2-A2)/ABS(A2).
  3. Select C2 and apply the Percentage format (Ctrl+Shift+5 in Excel) — it now reads as a percent.
  4. Drag C2 down to compute the percent change for a whole column at once.
=IFERROR((B2-A2)/ABS(A2),"N/A")
Divide-by-zero-safe: when A2 = 0 the raw formula returns #DIV/0!; IFERROR shows N/A instead.

In SQL

To compute percent change across a whole table — this period versus last, old versus new — do it in one query. Given a table changes(old_value, new_value), this PostgreSQL-style statement returns the signed absolute change, the signed percent change, and a direction label, and never raises a divide-by-zero error. ABS() is only on the denominator, so the numerator keeps its sign — the percent is + for an increase and − for a decrease.

SELECT
    old_value,
    new_value,
    new_value - old_value                                                AS absolute_change,
    ROUND((new_value - old_value) * 100.0 / NULLIF(ABS(old_value), 0), 4) AS percent_change_pct,
    CASE
        WHEN new_value > old_value THEN 'increase'
        WHEN new_value < old_value THEN 'decrease'
        ELSE 'no change'
    END                                                                  AS direction
FROM changes;
NULLIF(ABS(old_value), 0) returns NULL when old_value = 0, so the row survives and percent_change_pct is NULL instead of throwing.

Two traps to avoid. First, divide-by-zero: NULLIF turns a zero base into NULL so the division is skipped rather than erroring. Second, integer division: if old_value and new_value are INTEGER columns, (new_value - old_value) / NULLIF(ABS(old_value),0) truncates toward zero — (150-200)/200 becomes 0, so a real −25% prints as 0. Force floating-point math by putting the float literal in the numerator, before the division: multiplying by 100.0 first promotes the whole expression to a decimal and preserves the sign.

-- PostgreSQL
(new_value - old_value)::numeric * 100 / NULLIF(ABS(old_value), 0)

-- SQL Server
CAST(new_value - old_value AS FLOAT) * 100 / NULLIF(ABS(old_value), 0)

-- MySQL ('/' already returns a decimal; also returns NULL on divide-by-zero)
(new_value - old_value) * 100 / NULLIF(ABS(old_value), 0)
Explicit casts per engine when the columns are integers — no ABS on the numerator, so the sign is preserved.

Percent change vs percent difference vs percent error

Three formulas that look alike but answer different questions. The denominator is the tell: the original value, the average of the two values, or a known reference. Percent change is the only one that keeps a sign.

MetricFormulaDenominatorSignUse it when
Percent change(new − old) / |old| × 100The original (old) valueSigned: + up, − downA single value moves over time from an old to a new figure (growth, price move, this period vs last).
Percent difference|A − B| / |(A + B) / 2| × 100The average of the two valuesAlways ≥ 0, symmetricYou compare two values and neither is the 'true' one — you just want how far apart they are.
Percent error|observed − expected| / |expected| × 100The accepted / true valueAlways ≥ 0 (magnitude)One value is a known reference and you're checking another against it (measured vs accepted, forecast vs actual).

Reference tables

FAQ

Is percent increase the same as percent change?

Yes — they are the same calculation. Percent increase, percent decrease, and percent change all use (new − old) / |old| × 100; the sign of the answer is the label. A positive result is a percent increase, a negative one is a percent decrease, and zero is no change. You don't need a separate 'increase' formula and a separate 'decrease' formula — one formula covers both, and this calculator adds the increase or decrease word for you.

Why does the calculator say the percent change is undefined?

Because the old (starting) value is zero. Percent change expresses the movement as a percentage of the old value, and there is no meaningful percentage of zero — the division is undefined, not zero and not infinity. When this happens the absolute change is still shown and stays valid; if you need a percentage, measure against a non-zero starting point instead.

What's the difference between percent change and percent difference?

The denominator, and the sign. Percent change divides by the old value and keeps its sign, so it tells you how much a value moved and in which direction. Percent difference divides by the average of the two values and is always positive and symmetric — swapping the inputs gives the same number — so it tells you how far apart two figures are when neither is the 'original'. This page shows both, and the comparison table above puts them side by side with percent error.

Related tools