Average Percentage Calculator
Average percentage calculator for a simple mean or a weighted average when groups differ in size. This page also works as a percent average calculator and covers how to add percentages together and combine percentages, with six worked examples.
Example values are filled in. Replace them with your own.
Average percentage
75%
Working
- Sum of the 2 percentages = 150
- 150 ÷ 2 = 75%
- Sum of the percentages
- 150
- Number of percentages
- 2
Four test scores of 80%, 90%, 70% and 85% average 81.25%. But percentages from groups of different sizes cannot simply be added up and divided, because a rate from 50 people should count for more than one from 20.
Enter a list of percentages into this online average percentage calculator and it returns the simple average. Add a weight for each, such as a sample size or a mark allocation, and it returns the weighted average and shows why the two can differ. Below it you will find the formulas, six worked examples and a short section on averaging growth rates.
How to average percentages
Quick answer: add the percentages and divide by how many there are. If the percentages come from groups of different sizes, multiply each by its weight, add the results and divide by the total weight.
The simple average of percentages
- Add all the percentages together.
- Divide the sum by the number of percentages.
- Add the percent sign.
This is the arithmetic mean. It treats every percentage as equally important, which is right when each one comes from a group of the same size, such as four tests marked out of the same total. The percentage average calculator above does this when no weights are given, as does any percent average calculator in its simple mode.
Weighted average of percentages
The weighted average is the sum of each percentage times its weight, divided by the sum of the weights:
weighted average = (p1 × w1 + p2 × w2 + ... + pn × wn) ÷ (w1 + w2 + ... + wn)Here p is each percentage and w is its weight. The weight can be a sample size, a number of marks or a share of a grade. It only has to be non-negative, and the weights do not need to add up to 100. The weights decide how much each percentage counts.
This is why a simple mean can be wrong. A pass rate of 90% from 50 students should pull the overall figure further than a pass rate of 60% from 20 students, and the simple mean gives them the same pull. Whenever the underlying groups differ in size, switch the calculator above to weighted mode. It works as a weighted percentage calculator and as an average percentage calculator with weights.
How to calculate a weighted average step by step
- Multiply each percentage by its weight.
- Add those products together.
- Add the weights together.
- Divide the sum of the products by the sum of the weights.
Take coursework at 85% with a weight of 40 and an exam at 70% with a weight of 60. The products are 3,400 and 4,200, which add to 7,600. The weights add to 100, so the average is 76%. When the weights are sample sizes, each product is 100 times the number of successes in that group, which is why the weighted average of pass rates equals the combined pass rate.
Adding percentages together
How to add percentages together depends on the whole: you can add them only when they are shares of the same whole. Market shares of 25%, 30% and 12% of one market add up to 67% of that market. When the percentages come from different wholes, the sum means nothing: 50% of 20 people and 25% of 80 people do not make 75% of anyone.
To combine percentages from different groups, turn each into a count, add the counts and divide by the combined total. That is the weighted average with the group sizes as the weights, and it gives the overall percentage. Example 4 below shows it. The calculator above works as a combine percentages calculator when you enter each percentage with its group size as the weight.
Average percentage change over several periods
Growth rates need a different average. If a figure rises 10% and then falls 10%, the simple average is 0%, but the figure ends at 1.1 × 0.9 = 0.99 of its start, a loss of 1%. The average that reproduces the real result is the geometric mean of the multipliers:
average rate = ((1 + r1) × (1 + r2) × ... × (1 + rn))^(1/n) − 1For a rise of 10% then a fall of 10%, that is the square root of 0.99, minus 1, which is -0.50% per period. For the change between just two values, use the percentage change calculator, and for a single rise the percentage increase calculator.
Average percentage in Excel and Google Sheets
For a simple average, with the percentages in A2:A5, type =AVERAGE(A2:A5). For a weighted average, with the percentages in A2:A4 and the weights in B2:B4, type =SUMPRODUCT(A2:A4,B2:B4)/SUM(B2:B4). The percentages in Excel guide covers more formulas.
Averaging percent errors
Average percent error is a different job. Work out each percent error first with the percent error calculator, then average the results as above.
Rounding and checking the result
Round only the final average. Averaging figures that were already rounded passes their rounding error into the result, so keep the exact values where you can. Quote one or two decimal places unless you need more. The calculator shows the sum and the count, or the total weight, beside the average so you can check the division yourself.
Average percentage examples
Example 1: four test scores
Given
Answer
Example 2: groups of different sizes
Given
Answer
| Group | Pass rate | Students | Passed |
|---|---|---|---|
| A | 60% | 20 | 12 |
| B | 80% | 30 | 24 |
| C | 90% | 50 | 45 |
| Total | 81% | 100 | 81 |
Example 3: a course grade with weights
Given
Answer
Example 4: percentages from different wholes
Given
Answer
Example 5: average growth
Given
Step 1
The simple average is 20%.
Answer
Example 6: marks out of different totals
Given
Step 1
The simple average of 75% and 70% is 72.5%.
Answer
Average percentage code
Both versions reproduce the examples above (81.25, 81, 76, 76.67 and 19.72), reject non-numeric input, and refuse mismatched or all-zero weights.
JavaScript
function finite(name, v) { if (typeof v !== "number" || !Number.isFinite(v)) throw new TypeError(`${name} must be a finite number`);}function places(decimals) { if (!Number.isInteger(decimals) || decimals < 0 || decimals > 10) throw new RangeError("decimals must be a whole number from 0 to 10"); return decimals;}function list(name, values) { if (!Array.isArray(values) || values.length < 1) throw new TypeError(`${name} must be a non-empty array of numbers`); values.forEach((v) => finite(name, v));}// Simple average: [80, 90, 70, 85] -> 81.25export function averagePercent(values, decimals = 2) { list("values", values); const d = places(decimals); return Number((values.reduce((a, b) => a + b, 0) / values.length).toFixed(d));}// Weighted average: weights can be sample sizes, marks or any non-negative numbersexport function weightedAveragePercent(values, weights, decimals = 2) { list("values", values); list("weights", weights); if (values.length !== weights.length) throw new RangeError("values and weights must be the same length"); if (weights.some((w) => w < 0)) throw new RangeError("weights must not be negative"); const d = places(decimals); const total = weights.reduce((a, b) => a + b, 0); if (total === 0) throw new RangeError("the weights must not all be 0"); const sum = values.reduce((acc, v, i) => acc + v * weights[i], 0); return Number((sum / total).toFixed(d));}// Average percentage change per period over several periods (geometric mean)export function averageGrowth(ratesPercent, decimals = 2) { list("rates", ratesPercent); const d = places(decimals); let product = 1; for (const r of ratesPercent) { if (r <= -100) throw new RangeError("a rate of -100% or less cannot be averaged this way"); product *= 1 + r / 100; } return Number(((Math.pow(product, 1 / ratesPercent.length) - 1) * 100).toFixed(d));}Python
from decimal import Decimal, ROUND_HALF_UPfrom math import isfinitedef _num(name, v): if isinstance(v, bool) or not isinstance(v, (int, float, Decimal)) or not isfinite(float(v)): raise ValueError(f"{name} must be a finite number") return Decimal(str(v))def _round(x, 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 x.quantize(Decimal(1).scaleb(-decimals), rounding=ROUND_HALF_UP)def _list(name, values): if not isinstance(values, (list, tuple)) or len(values) < 1: raise ValueError(f"{name} must be a non-empty list of numbers") return [_num(name, v) for v in values]def average_percent(values, decimals=2): nums = _list("values", values) return _round(sum(nums) / len(nums), decimals)def weighted_average_percent(values, weights, decimals=2): nums = _list("values", values) w = _list("weights", weights) if len(nums) != len(w): raise ValueError("values and weights must be the same length") if any(x < 0 for x in w): raise ValueError("weights must not be negative") total = sum(w) if total == 0: raise ValueError("the weights must not all be 0") return _round(sum(n * x for n, x in zip(nums, w)) / total, decimals)def average_growth(rates_percent, decimals=2): rates = _list("rates", rates_percent) product = Decimal(1) for r in rates: if r <= -100: raise ValueError("a rate of -100% or less cannot be averaged this way") product *= 1 + r / 100 return _round((product ** (Decimal(1) / len(rates)) - 1) * 100, decimals)weightedAveragePercent([60, 80, 90], [20, 30, 50]) returns 81, the group-size example, and averageGrowth([10, 20, 30]) returns 19.72. Round only for display. The Python version rounds half up, which is the usual school convention, and returns Decimal values, so 81 prints as 81.00.
Privacy and input safety
- Values are calculated in your browser. The numbers you enter are not sent to a server or stored.
- Fields accept numbers only, with an optional trailing % sign on a percentage. Text, empty fields, NaN and Infinity are rejected with a message, and nothing you type is ever evaluated as code.
- A row with a percentage but no weight is read as a weight of 1 in weighted mode. A completely empty row is ignored.
- Weights must not be negative. If every weight is 0 the calculator asks for at least one positive weight, because the total would be zero.
- Percentages above 100 or below 0 are accepted in the simple and weighted modes, because some data has them. Average growth refuses a rate of -100% or lower, which would wipe out the whole figure.
- Decimal places are limited to a whole number from 0 to 10.
- A comma followed by exactly three digits is read as a thousands separator, so 1,200 is 1200. Any other comma is a decimal point, so 12,50 is 12.50, and a number starting with 0, such as 0,500, is read as a decimal. Mixed formats such as 1.234,5 and ambiguous entries such as 1,2,3 are refused instead of guessed. Spaces, including no-break spaces, between digit groups are ignored.
- A very long paste cannot freeze the page.
Common average percentage mistakes
| Mistake | What goes wrong | What the calculator does |
|---|---|---|
| Using a simple mean for groups of different sizes | 60%, 80% and 90% from 20, 30 and 50 people average 76.67%, not 81% | Offers a weighted mode with the group sizes |
| Adding percentages of different wholes | 50% of 20 and 25% of 80 do not make 75% | Combines the counts and divides by the total |
| Averaging growth rates with the simple mean | +10% then -10% averages 0%, but the figure ends 1% down | Uses the geometric mean for growth |
| Dropping a 0% from the list | 80% and 0% average 40%, not 80% | Counts every row with a value, including 0 |
| Mixing decimals and percentages | 0.8 and 90 in one list gives 45.4, not 85 | Takes every value as a percentage |
| Treating the weights as percentages that must sum to 100 | Sample sizes of 20, 30 and 50 work without any scaling | Divides by the total weight |
| All weights at 0 | The total is zero, so the average is undefined | Asks for a positive weight |
| Rounding each percentage before averaging | Early rounding shifts the result | Rounds only the final average |
Which average to use
| Method | Use it when | Example | Result |
|---|---|---|---|
| Simple average | Every percentage comes from a group of the same size | 80%, 90%, 70%, 85% | 81.25% |
| Weighted average | The groups differ in size, or the items carry different weights | 60%, 80%, 90% with 20, 30, 50 people | 81% |
| Sum of percentages | The percentages are shares of one whole | 25% + 30% + 12% of one market | 67% |
| Combined from counts | The percentages come from different wholes and you know the counts | 10 of 20 and 20 of 80 | 30% |
| Geometric mean | The percentages are growth rates over successive periods | +10% and -10% | -0.50% per period |