Percentage Points vs Percent: What Is a Percentage Point?
Percentage points measure the gap between two percentages, which is a different thing from a percent change. It also covers what a percentage point is, how to calculate percentage point change and difference, and basis points.
Example values are filled in. Replace them with your own.
Change in percentage points
+2
Increase
Working
- 6 − 4 = 2 percentage points
- 2 ÷ 4 × 100 = 50%
- Relative change
- +50%
- Change in basis points
- +200
Percentage change divides by the absolute value of the starting value, so a move from −50 to −25 is +50%, an increase.
A headline says unemployment jumped 50%. Another says it rose 2 points. Both can describe the same move from 4% to 6%, and they are different measurements: one is a gap, the other is a ratio.
A percentage point is the unit for the gap between two percentages, so 6% minus 4% is 2 percentage points. A percent change compares that gap with the starting rate: 2 ÷ 4 is 50%. Enter a starting and an ending rate in this percentage point calculator and it returns both, with the working.
What is a percentage point?
Quick answer: a percentage point is one unit of the difference between two percentages. A rate that moves from 40% to 44% has risen by 4 percentage points. The same move is a 10% relative increase, because 4 ÷ 40 = 0.10.
The unit is written pp, pts or simply points. It applies to anything already expressed as a percentage of a whole: an unemployment rate, an interest rate, a vote share, an inflation rate. It measures distance on the 0 to 100 scale, so 4 points is the same gap at 40% as at 4%. People also write "percent points", but the standard term is percentage points.
Percent vs percentage points
The two answer different questions about the same two numbers. A percentage point change is the absolute gap, the ending rate minus the starting rate. A percent change is that gap divided by the starting rate.
The relative figure depends on the base, which is why it looks dramatic when rates are small. Two points on a 4% rate is a 50% rise. Two points on a 40% rate is 5%. The gap in points is 2 both times.
From 4% to 6% is +2 points and +50%. From 6% to 4% is −2 points but −33.33%, because the base is now 6. The points are symmetric and the percentages are not.
How to calculate a percentage point change
- Write the starting and ending rates as percentages of the same whole.
- Subtract the starting rate from the ending rate. The result is the change in percentage points, and its sign gives the direction.
- For the relative change, divide that difference by the starting rate and multiply by 100.
percentage point change = ending rate - starting raterelative change = (ending rate - starting rate) / abs(starting rate) × 100%The same subtraction gives a percentage point difference between two groups: 52% of one group and 47% of another are 5 points apart. To apply a known change, add the points to the rate: 4.5% less 0.25 points is 4.25%.
Percentage points examples
Example 1: an unemployment rate, 4% to 6%
Given
Step 1
In points, 6 − 4 = 2.
Answer
Example 2: an interest rate, 4.25% to 4.50%
Given
Step 1
In points, 4.50 − 4.25 = 0.25, which is 25 basis points.
Answer
Example 3: a poll, 52% against 46%
Given
Step 1
The lead is 52 − 46 = 6 percentage points, not a 6% lead.
Answer
Example 4: points added against percent added
Given
Step 1
If it rose by 0.75 percent instead, the new rate would be 5.5 × 1.0075 = 5.54125, which is 5.54%.
Answer
Percentage points vs basis points
A basis point is one hundredth of a percentage point, so 1 point is 100 basis points. 25 basis points is 0.25 points and 150 basis points is 1.5 points. To convert, divide basis points by 100 to get points, or multiply points by 100.
Percentage points code
Both versions reproduce the examples above (2 and 50, 0.25 and 5.88, 6 and 13.04, 6.25 and 5.54), return no relative change when the starting rate is 0 and reject non-numeric input.
JavaScript
function finite(name, v) { if (typeof v !== "number" || !Number.isFinite(v)) throw new TypeError(`${name} must be a finite number`);}function checkDecimals(decimals) { if (!Number.isInteger(decimals) || decimals < 0 || decimals > 10) throw new RangeError("decimals must be a whole number from 0 to 10");}export function percentagePointChange(start, end, decimals = 2) { finite("start", start); finite("end", end); checkDecimals(decimals); const points = Number((end - start).toFixed(decimals)); const relativePercent = start === 0 ? null : Number((((end - start) / Math.abs(start)) * 100).toFixed(decimals)); return { points, relativePercent };}export function addPoints(rate, points, decimals = 2) { finite("rate", rate); finite("points", points); checkDecimals(decimals); return Number((rate + points).toFixed(decimals));}export function addPercent(rate, percent, decimals = 2) { finite("rate", rate); finite("percent", percent); checkDecimals(decimals); return Number((rate * (1 + percent / 100)).toFixed(decimals));}export function parseRate(raw) { const s = String(raw).trim().replace(/%$/, "").replace(",", "."); return /^[+-]?(\d+\.?\d*|\.\d+)$/.test(s) ? Number(s) : NaN;}Python
from decimal import Decimal, ROUND_HALF_UP, InvalidOperationdef _rate(name, v): if isinstance(v, bool) or not isinstance(v, (int, float, str, Decimal)): raise ValueError(f"{name} must be a number") try: d = Decimal(str(v).strip().rstrip("%").replace(",", ".")) except InvalidOperation: raise ValueError(f"{name} must be a number") if not d.is_finite(): raise ValueError(f"{name} must be a finite number") return ddef _round(d, decimals): if not isinstance(decimals, int) or isinstance(decimals, bool) or not 0 <= decimals <= 10: raise ValueError("decimals must be a whole number from 0 to 10") return d.quantize(Decimal(1).scaleb(-decimals), rounding=ROUND_HALF_UP)def percentage_point_change(start, end, decimals=2): s, e = _rate("start", start), _rate("end", end) points = _round(e - s, decimals) relative = None if s == 0 else _round((e - s) / abs(s) * 100, decimals) return points, relativedef add_points(rate, points, decimals=2): return _round(_rate("rate", rate) + _rate("points", points), decimals)def add_percent(rate, percent, decimals=2): return _round(_rate("rate", rate) * (1 + _rate("percent", percent) / 100), decimals)percentagePointChange(4, 6) returns { points: 2, relativePercent: 50 }. The relative change divides by the absolute starting rate, the same convention as the percentage change calculator. The Python version rounds half up with Decimal, the usual school convention, and returns Decimals, so 2 prints as 2.00.
Privacy and input safety
Values are calculated in your browser. The rates you enter are not sent to a server or stored.
Fields accept numbers only, with an optional trailing % sign. Text, empty fields, NaN and Infinity are rejected with a message, and nothing you type is ever evaluated as code.
A starting rate of 0 returns the points and shows the percent change as undefined instead of dividing by zero. A comma decimal (4,25) is read as 4.25, and decimal places are limited to a whole number from 0 to 10.
Common percentage point mistakes
| Mistake | What goes wrong | What the calculator does |
|---|---|---|
| Calling a point gap a percent | A rise from 4% to 6% reported as 2% | Labels the result in percentage points |
| Quoting relative change without the base | "Up 50%" hides that the rate went from 4% to 6% | Shows both figures beside the two rates |
| Dividing by the ending rate | 2 ÷ 6 gives 33.33% instead of 50% | Divides by the starting rate |
| Treating a rise and a fall as symmetric | 4% to 6% is +50%, but 6% to 4% is −33.33% | Shows the starting rate used for each direction |
| Adding a percent when points were meant | 5.5% plus 0.75% gives 5.54%, not 6.25% | Adds points and percent in separate modes |
| Starting from 0% | The percent change is undefined | Shows "undefined" with the reason |
Percentage points vs percent change vs basis points vs percent difference
| Measure | Formula | 4% to 6% | Use it for |
|---|---|---|---|
| Percentage point change | end − start | +2 points | The gap between two rates |
| Percent change of a rate | (end − start) ÷ start × 100 | +50% | How large the move is against the starting rate |
| Basis points | points × 100 | +200 basis points | Rate moves in finance |
| Percent difference | abs(a − b) ÷ ((a + b) ÷ 2) × 100 | 40% | Two rates with no starting point |
The first two rows are the pair people confuse. Basis points are a change of unit, and percent difference is the version with no direction, which the percentage difference calculator handles. When you report a change in a rate, give the points and the two rates, and add the percent only if the relative size matters.
Frequently asked questions
What is the difference between percentage points and percent?
What is a percentage point?
How to calculate percentage point change?
How do I convert percentage points to percent?
How to calculate percentage point change in Excel?
=ROUND((B2-A2)*100,2) returns the points and =(B2-A2)/A2, formatted as a percentage, returns the relative change. For 4% and 6% they give 2 and 50%.