HomeCalculatorsMathPercent, Ratio & ProportionPercentage Change Calculator
Math calculator

Percentage Change Calculator

Calculate percentage increase or decrease and reverse-solve initial or final values. See complete signed solutions, formulas, and numerical limits.

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
  • All published p/v1/v2 directions and three-value consistency; complete signed inverse branches, no/unique/two/infinite solutions; exact binary64-rational formulas rounded ties-even, secondary-field range rejection and input-underflow guards; 8-ULP same-sign consistency with strict zero.
  • 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.2.0 · CVP VERIFIED · CVP protocol 1.0.0-proposed · Core assurance· View Manifest · CVP overview · Specification
Versions
Calculation 1.2.0 · CVP protocol 1.0.0-proposed · Evidence 2026-10-29.math-uuce-fields-v1
Verification revision
2026-10-29.math-uuce-fields-v1 · 5/5 property · digest 60c22e494c86
Legacy regression
8/8 tests · Production surface contract 6/6
Trust layers
Verification VERIFIED · Production CURRENT · Overall CVP state: VERIFIED under CVP 1.0.0-proposed
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. Error-path engine·REST·MCP 2/2 (status, code, calculation_version). SSR compared on URL-canonical requested calculations; empty query is idle (not an error) and JSON-typed object/array inputs are REST/MCP-only.
Supplemental domain review
Not performed
Named expert review
Not performed
CVP suite
108/108 golden · 2/2 CVP boundary · 25/25 invalid · 5/5 property · 1/1 metamorphic · 4/4 round-trip · 7/7 cross-interface · 3/3 cross-calculator · 6/6 CVP contract · Manifest
Sources
Sources
Evidence
6 legacy golden · 2 legacy boundary · legacy regression suite · 108/108 oracle-backed golden · 25/25 invalid · Artifact integrity PASS
This calculator CURRENT · Public schema 1.2.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. Choose Check all3 to enter all three and check consistency. Shared URLs and machine inputs with all three also check consistency before solving.

3

Read the signed result and extras

Positive = increase; negative = decrease. The result panel also shows ΔV and, for a unique pair, the signed 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.2.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. Two of initial, final, and % change are inputs; all three can check consistency; Solve for selects the output. Solving for V₁ can have no, unique, two, or infinitely many solutions 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)
  • For a unique pair: signed 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.
  • Two active fields normally determine the output. Explicit solve_for selects the output. Choose Check all3 to enter all three and check consistency. Shared URLs and machine inputs with all three also check consistency before solving.
  • 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 not matching within 8 ULP (same-sign nonzero; strict zero) → status inconsistent, code INCONSISTENT_INPUTS
Numerical precision
  • Computation uses IEEE-754 binary64 (JavaScript Number).
  • Each published numerical field is evaluated using exact rational formulas of normalized binary64 inputs and rounded once to nearest ties-even. Display uses the shortest round-trippable binary64 string (up to 17 significant digits).
  • REST and SSR return the engine object. value is the solved scalar, the first candidate for two solutions, or null for infinite solutions. Complete candidates, solutions and signed branches are published separately; do not discard the second candidate.
  • 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 6/6 · 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
  • 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.
  • NIST — SI Unit Rules and Style Conventions — Percent and fractions
    Supports: The symbol % represents the number 0.01. Thus p% = p/100 and a part of p% of base b equals b×p/100; inverse percentage equations are algebraic rearrangements. CalculatorX’s negative-baseline signed-change convention is separately specified, not attributed to NIST. Mathematical reference only; not implementation validation or an endorsement of CalculatorX.
Calculation version
1.2.0

Background

Interpretation and common distinctions.

What does this percentage change calculator compute?

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. Two of initial, final, and % change are inputs; all three can check consistency; Solve for selects the output. Solving for V₁ can have no, unique, two, or infinitely many solutions because the denominator uses |V₁|.

The published formula or method is % 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.. The following references support the stated mathematics or method:

  • NIST — SI Unit Rules and Style Conventions: The symbol % represents the number 0.01. Thus p% = p/100 and a part of p% of base b equals b×p/100; inverse percentage equations are algebraic rearrangements. CalculatorX’s negative-baseline signed-change convention is separately specified, not attributed to NIST. Mathematical reference only; not implementation validation or an endorsement of CalculatorX.

Which inputs and limits should you check?

Percentage change uses the starting value as its reference. The signed-change and zero-reference cases follow this calculator’s documented convention.

The worked example uses 60 → 72 with 12/|60|×100%. Compare it with the Example calculations and the complete result for the same inputs.

How can you verify and cite this result?

CalculatorX is responsible for this page. The mathematical references above explain the model; implementation checks and their scope are documented separately in the math.percent_change v1.2.0 Evidence and capability contract. Read the displayed verification and production state together with the specification's numerical limits.

Use the clean calculator URL to cite the tool. A shared input link identifies a particular calculation. Content updates, numerical verification, and domain reviews have separate dates and scopes.

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.

Numerical range and precision

Enter finite binary64 numbers or decimal strings (up to512 characters). Aliases must agree; unknown fields and invalid solve directions are rejected. Inputs round to binary64 first. Formulas are evaluated exactly for those normalized operands, then each published field rounds once, ties to even. The display uses shortest round-trip decimals; it does not track measurement significant figures.

Initial0 is undefined. Decimal-string underflow and nonzero result underflow or overflow, including secondary fields and any valid initial-value branch, return NUMERIC_RANGE: rescale. Raw JSON numeric literals that underflow during parsing return NUMERIC_UNDERFLOW; a partial inverse set is never returned as complete. Near-zero initial values and inverse denominators near P=±100 amplify input rounding. All three inputs check percentages within8ULP only when nonzero with the same sign; zero must match exactly. Solving final preserves the entered P even when the final value rounds unchanged (resolution_limited). An infinite outcome states a positive/negative initial constraint; no-solution is a recoverable error.

Interactive calculations stay local; shared URLs and REST/MCP transmit inputs to the server, and local history may retain results on this device.

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.