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.
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
- 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
- Math is Fun — Percentage Difference vs Percentage Error vs Percentage Change
- Curran-Everett — Explorations in statistics: the analysis of change
- CalculatorX signed-change convention
- Evidence
- 6 legacy golden · 2 legacy boundary · legacy regression suite · 7/7 oracle-backed golden · 4/4 invalid · Artifact integrity PASS
- Semantic contract
- PASS
Full verification
Formulas
Uses the signed-change convention with |V₁|; reverse-solving may produce multiple valid initial values.
How to use
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.
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.
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
Decrease
3.50 → 2.625
Asymmetry
2.625 → 3.50
Negative start
−25 → 25
Two initials
V₂=25, P=+200%
Quick examples
Common values at a glance.
| From (V₁) | To (V₂) | % change |
|---|---|---|
| 60 | 72 | +20% (increase) |
| 1000 | 1200 | +20% |
| 1000 | 800 | −20% (decrease) |
| 3.50 | 2.625 | −25% |
| 5 | 20 | +300% |
| 20 | 10 | −50% |
| −25 | 25 | +200% |
| −25 | −50 | −100% |
Percentage Change calculator specification
Version 1.1.0 · Engine tested
- Engine tested 8/8 tests · Production surface contract 3/3
- Named expert review Not performed
- Calculation version 1.1.0
- 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-28Supports: 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-28Supports: 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₁ solutionsSupports: % 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.
- Math is Fun — Percentage Difference vs Percentage Error vs Percentage Change — Percentage change uses |Old| in the denominator · accessed 2026-08-28
- 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.
Related tools
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.