HomeCalculatorsMathPercentage Change Calculator
Math calculator

Percentage Change Calculator

Calculate the percentage increase or decrease from an initial value to a final value. You can also solve for the initial or final value. Free online — no sign-up.

Instant result
Result

Enter values to calculate.

Inputs
Mode
Formula
Trust summary CVP VERIFIED · CVP protocol 1.0.0-proposed · Core assurance
Input interpretation
Enter values to calculate.
Result
Assurance
Core
Declared partition coverage
PASS · 5/5 declared partitions (forward, inverse-v2, inverse-v1, invalid-domain, xcal) · Matrix
Known limitations
  • V1≠0; solve_for p|v1|v2; inverse V1 can be 0, 1, or 2 solutions
  • Core CVP does not include live graph, viewport, or pointer interaction.
Model
Percent change between initial and final values, or the missing initial/final/% when two are known. Reverse-solving V₁ publishes both signed branches when both are valid.
Scope
Interactive evaluation runs locally in the browser. Shared URLs and REST evaluate the same versioned engine (query SSR).
Verification
Engine tested · Source checked · v1.1.0 · CVP VERIFIED · CVP protocol 1.0.0-proposed · Core assurance· View Manifest · CVP overview · Specification
Versions
Calculation 1.1.0 · CVP protocol 1.0.0-proposed · Evidence 2026-09-08.signed-set
Verification revision
2026-09-08.signed-set · 5/5 property · digest a7b9f7091c43
Legacy regression
8/8 tests · Production surface contract 3/3
Reference
O1 model · O2 expected_values · O2 numerical_behavior
Interfaces
PASS · UI (SSR) / REST / MCP — ui-ssr is query-result HTML, not a live browser session.
Supplemental domain review
Not performed
Named expert review
Not performed
CVP suite
7/7 golden · 2/2 CVP boundary · 4/4 invalid · 5/5 property · 1/1 metamorphic · 4/4 round-trip · 1/1 cross-interface · 3/3 cross-calculator · 1/1 CVP contract · Manifest
Sources
Sources
Evidence
6 legacy golden · 2 legacy boundary · legacy regression suite · 7/7 oracle-backed golden · 4/4 invalid · Artifact integrity PASS
This calculator CURRENT · Public schema 1.1.0 matches · Semantic contract ✓ · Production attested · Public/cache ✓ · Origin ✓
Semantic contract
PASS
Full verification

Manifest identity, reference classes, interfaces, suite, and production records.

Formulas

Uses the signed-change convention with |V₁|; reverse-solving may produce multiple valid initial values.

Percent change% change = (V₂ − V₁) / |V₁| × 100%Domain: V₁ ≠ 0
Solve finalV₂ = V₁(1 + P/100) if V₁ > 0; V₁(1 − P/100) if V₁ < 0Domain: V₁ ≠ 0
Solve initial (V₁ > 0)V₁ = V₂ / (1 + P/100)Domain: 1 + P/100 ≠ 0 and that V₁ > 0
Solve initial (V₁ < 0)V₁ = V₂ / (1 − P/100)Domain: 1 − P/100 ≠ 0 and that V₁ < 0
iSigned-change convention: CalculatorX uses |V₁| as the denominator so the sign follows the numerical direction of change when the initial value is negative. Some definitions restrict percentage change to positive baselines or divide by V₁ directly. Solving for V₁ is uniquely determined only on one signed branch — otherwise the engine returns two solutions, none, or infinitely many.

How to use

1

Choose Solve for

Default solves percent change from initial and final. Switch to Final or Initial to reverse-solve. The URL records solve_for=p|v2|v1.

2

Enter the two known values

The solved field is calculated. If all three are supplied without solve_for, they are checked for consistency rather than overwritten.

3

Read the signed result and extras

Positive = increase; negative = decrease. The result panel also shows ΔV and, when V₁ > 0, the multiplier and “% of initial.”

Example calculations

Common configurations with formula and result.

ϟ

Increase

60 → 72

12/|60|×100%
+20%
ϟ

Decrease

3.50 → 2.625

−0.875/3.50×100%
−25%
ϟ

Asymmetry

2.625 → 3.50

0.875/2.625×100%
≈ +33.33%
ϟ

Negative start

−25 → 25

50/|−25|×100%
+200%
ϟ

Two initials

V₂=25, P=+200%

V₁=25/3 or V₁=−25
8.333… or −25

Quick examples

Common values at a glance.

From (V₁)To (V₂)% change
6072+20% (increase)
10001200+20%
1000800−20% (decrease)
3.502.625−25%
520+300%
2010−50%
−2525+200%
−25−50−100%
i Percentage change ≠ percentage difference (difference uses the average of both values). It also differs from percent error (error compares to a true/accepted value). Final 25 with +200% has two valid initials: 8.333… and −25.

Percentage Change calculator specification

Version 1.1.0 · Engine tested

Calculation status

Review policy · Evidence

Definition
Percentage change measures how much a value moved from an initial (old) amount to a final (new) amount, relative to |V₁|. Positive means increase; negative means decrease. Exactly two of initial, final, and % change are inputs; Solve for selects the output. Solving for V₁ can have 0, 1, or 2 valid values because the denominator uses |V₁|.
What it calculates
Percent change between initial and final values, or the missing initial/final/% when two are known. Reverse-solving V₁ publishes both signed branches when both are valid.
Inputs
  • Initial value V₁ (optional if solving)
  • Final value V₂ (optional if solving)
  • Percent change P (optional if computing)
  • Solve for: p (default) | v2 | v1
Outputs
  • Signed % change with increase/decrease label
  • Change (ΔV)
  • When V₁ > 0: multiplier V₂/V₁ and final as % of initial
  • When solving V₁: 0, 1, or 2 valid initials (status multiple_solutions when two)
  • When V₂ = 0 and P = ±100%, solve V₁: INFINITELY_MANY on one sign of V₁
Formula
% change = (V₂−V₁)/|V₁|×100%. V₂ = V₁(1+P/100) if V₁>0; V₁(1−P/100) if V₁<0. V₁ = V₂/(1+P/100) on the V₁>0 branch; V₂/(1−P/100) on the V₁<0 branch.
Assumptions
  • Interactive evaluation runs locally in the browser. Shared URLs and REST evaluate the same versioned engine (query SSR).
  • CVP interface evidence is UI (SSR) query-result HTML, REST, and MCP (MCP reuses the calc API handler). That is interface-result consistency, not a live browser session, cache switching, or end-to-end UI test.
  • Signed-change convention: denominator is |V₁|, so a move from −100 to −50 is a +50% increase. Some definitions use V₁ without absolute value or restrict to positive baselines.
  • Exactly two fields are inputs. Explicit solve_for selects the output. If all three are supplied without solve_for, they are checked for consistency rather than overwritten.
  • Solving for V₁ is not always unique. The engine returns both valid initials when they exist.
Units
  • V₁ and V₂ in the same units; result in %
Boundary conditions
  • V₁ = 0 → INITIAL_VALUE_ZERO (percent change undefined)
  • Fewer than two inputs → MISSING_REQUIRED_INPUT
  • Invalid solve_for → INVALID_SOLVE_FOR
  • Positive-initial reverse branch: 1 + P/100 = 0 (P = −100%) is omitted
  • Negative-initial reverse branch: 1 − P/100 = 0 (P = +100%) is omitted
  • Solve V₁ may have 0, 1, or 2 solutions
  • V₂ = 0, P = −100%, solve V₁ → INFINITELY_MANY (any V₁ > 0)
  • V₂ = 0, P = +100%, solve V₁ → INFINITELY_MANY (any V₁ < 0)
  • V₂ = 0 and P ≠ ±100%, solve V₁ → NO_REAL_SOLUTION
  • All three values filled without solve_for and not matching the formula → INCONSISTENT_INPUTS
Numerical precision
  • Computation uses IEEE-754 binary64 (JavaScript Number).
  • Displayed results use up to 10 significant digits; trailing zeros are stripped. Scientific notation is used when |value| ≥ 1e12 or 0 < |value| < 1e-6.
  • REST and SSR return the engine object. result_detail.value is the solved number, or both initials when solve_for=v1 has two real solutions.
  • Interactive evaluation, shared URLs, and REST use the same formulas, solve_for contract, and error codes.
Example
(72−60)/|60|×100% = 20%
Validation cases

10 published on this page · 8/8 tests · Production surface contract 3/3 · View evidence

  • 60 → 72 → +20%
  • 3.50 → 2.625 → −25%
  • −25 → 25 → +200%
  • 5 → 20 → +300%
  • V₁=−25, P=200% (solve V₂) → V₂=25
  • V₂=25, P=+200% (solve V₁) → 8.333… or −25
  • V₁=0 → error INITIAL_VALUE_ZERO
  • V₂=0, P=−100%, solve V₁ → INFINITELY_MANY (any V₁ > 0)
  • V₂=0, P=+100%, solve V₁ → INFINITELY_MANY (any V₁ < 0)
  • V₂=25, P=−100%, solve V₁ → error NO_REAL_SOLUTION
Sources
  • Math is Fun — Percentage Difference vs Percentage Error vs Percentage Change — Percentage change uses |Old| in the denominator · accessed 2026-08-28
    Supports: Educational definition % change = (New − Old) / |Old| × 100%, matching CalculatorX’s signed-change convention for a negative baseline.
  • Curran-Everett — Explorations in statistics: the analysis of change — Relative change as (final − initial) / initial · accessed 2026-08-28
    Supports: Documents a relative-change definition that divides directly by the initial value rather than |initial|. Negative-baseline percentage change is therefore not a single universal convention.
  • CalculatorX signed-change convention — |V₁| denominator, piecewise inverse, and multiple V₁ solutions
    Supports: % change = (V₂−V₁)/|V₁|×100% (undefined at V₁ = 0). Inverse: V₂ = V₁(1+P/100) if V₁>0 and V₁(1−P/100) if V₁<0. Solving V₁ publishes both signed branches, INFINITELY_MANY at V₂=0 with P=±100%, and NO_REAL_SOLUTION when no branch is valid.
Calculation version
1.1.0

Background

Interpretation and common distinctions.

What is percentage change?

Percentage change tells you how much a quantity moved from an initial (old) value V₁ to a final (new) value V₂, relative to the start.

  • Positive result → increase
  • Negative result → decrease (a −25% change is a 25% decrease)

Use it when order matters (“from … to …”). For a directionless comparison of two numbers, use percentage difference instead.

Change vs difference vs error

Baseline Sign
% change Initial value + increase / − decrease
% difference Average of both Always ≥ 0
% error True/accepted value Usually ≥ 0

CalculatorX Percent Error defaults to the absolute-value form, so the result is ≥ 0. A signed form is opt-in.

Signed-change convention

CalculatorX uses |V₁| as the denominator:

% change=(V₂−V₁)/(|V₁|)× 100% (V₁ ≠ 0)

so the sign follows the numerical direction of change when the initial value is negative. A move from −25 to 25 is a +200% increase; from −100 to −50 is a +50% increase (less negative).

This is an explicit convention, not a universal law. Some educational sources also use |Old|. Other statistical treatments divide by V₁ itself and may restrict the formula to a positive baseline.

Inverse formulas

Equivalently, V₂ = V₁ + (P/100) |V₁|. Expanding the absolute value gives the signed branches:

V₂ = V₁(1+P/100) when V₁>0

V₂ = V₁(1−P/100) when V₁<0

Solving for the initial value is the same relation run backward. Each branch is valid only when the solved V₁ has the assumed sign:

V₁ = V₂/(1+P/100) when that V₁>0 and 1+P/100≠ 0

V₁ = V₂/(1−P/100) when that V₁<0 and 1−P/100≠ 0

For V₂=25 and P=+200%, both V₁=25/3 and V₁=−25 satisfy the definition. The calculator returns two valid initial values instead of picking one.

Special cases: V₁=0 is undefined; P=−100% omits the positive-start reverse branch; P=+100% omits the negative-start reverse branch. If V₂=0 and P=−100%, every V₁>0 works; if V₂=0 and P=+100%, every V₁<0 works.

Other calculators in this family: Percentage, Percent error, VAT, Compound interest .

}

Frequently asked questions

Key distinctions behind the calculation.

What is percentage change?

It is the relative change from an initial value to a final value, as a percent of |initial|. Positive means increase; negative means decrease.

How do I calculate percent change?

Subtract initial from final, divide by the absolute value of the initial, multiply by 100: (final − initial) / |initial| × 100%.

Why use absolute value of the initial?

This is CalculatorX’s signed-change convention: when the starting value is negative, the sign of the result still follows the numerical direction of change (less negative is an increase). Some definitions divide by V₁ directly or refuse negative baselines.

Is percent change the same as percent difference?

No. Change uses the initial value as the baseline. Difference divides |A−B| by the average of A and B and is always non-negative.

Why does reversing the numbers give a different percent?

Because the baseline changes. A 25% drop from 3.50 is not the same size as a 25% rise from 2.625.

Can I solve for the final value from a percent change?

Yes. Choose Solve for → Final. V₂ = V₁(1 + P/100) when V₁ > 0, and V₂ = V₁(1 − P/100) when V₁ < 0. Equivalently V₂ = V₁ + (P/100)·|V₁|.

Why can solving for the initial value give two answers?

Because |V₁| is not linear in V₁. For V₂ = 25 and P = +200%, both V₁ = 25/3 ≈ 8.333 and V₁ = −25 satisfy the definition. The engine publishes both instead of silently picking one.

When is there no initial value, or infinitely many?

V₁ = 0 is always undefined. Positive-start reverse-solve is undefined at P = −100%; negative-start is undefined at P = +100%. If V₂ = 0 and P = −100%, every V₁ > 0 works (INFINITELY_MANY). If V₂ = 0 and P = +100%, every V₁ < 0 works. Other (V₂, P) pairs can have no real V₁.

Where is percent change used?

Prices, salaries, population growth rates, investment returns, and any “old vs new” comparison where order matters.