ForHosting KIT · Education

Bell curve grade calculator

A score of 88 in a class with a mean of 75 and a standard deviation of 8 sits 1.625 deviations above average, which is an A on this curve. Enter the score and both class figures for the z-score and the letter. Free in your browser.

  • Free
  • Runs in your browser
  • No sign-up
  • Your data stays on your device
Use it from WebAPIEmailTelegramApp soon
If you enter
Score
88
Mean
75
Std
8
You get
Z score
1.625
Letter grade
A
Percentile
94.7919
Interval
z >= 1.5

A letter on a curve is not the same thing as a letter on a fixed percent table. Teachers, registrars, department chairs, and LMS authors who grade on a bell curve first locate a raw score relative to the class mean and standard deviation, then assign A through F from normal-distribution bands so the average student lands near C and the tails take A and F. Hand-drawn cutoffs in a spreadsheet drift between sections, and verbal rules such as “about a standard deviation above is a B” are not reproducible from one grader to the next. This bell curve grade calculator accepts a raw score, the class mean, and a positive class standard deviation, computes the z-score z = (score − mean) / std, and maps that z onto documented A, B, C, D, and F bands. No roster upload, no network call, and no randomness: you supply the two class summaries and one score, and the letter is deterministic for every valid input.

How a raw score becomes a curved letter grade

Grading on a bell curve does not award a letter from a fixed percent-correct table such as ninety equals A. It first places a raw score on the class distribution, then reads a letter from standard-normal bands. A z of zero sits at the class average; a z of plus one is one standard deviation above the mean; a z of minus one and a half is in the lower tail.

This calculator uses the classic five-letter classroom curve that treats C as the modal average band: A when z is at least 1.5, B when z is at least 0.5 and strictly below 1.5, C when z is at least minus 0.5 and strictly below 0.5, D when z is at least minus 1.5 and strictly below minus 0.5, and F when z is strictly below minus 1.5.

Those cutoffs put roughly seven percent of a perfectly normal class in A and in F, about twenty-four percent in B and in D, and about thirty-eight percent in C. The same raw eighty-eight that would be a B on a ten-point percent scale can become an A if the class mean is seventy-five and sigma is eight, because that score is 1.625 standard deviations above the mean. Conversely a seventy that looks like a C-minus on a fixed scale can fall to D when the class ran hot.

Boundary values are inclusive on the lower edge of each letter except F, so z exactly 1.5 is A and z exactly minus 1.5 is D. The response also reports the standard-normal percentile of that z and the theoretical share of a normal class that falls in the assigned letter, so a syllabus or parent letter can show both the rank and the band.

Where a bell-curve letter grade earns its keep

Large lecture courses that publish a curve in the syllabus need one consistent mapping from z-score to letter so the LMS, the printed grade roster, and the office-hours explanation never contradict each other on the same student. Department chairs who compare sections want a documented A/B/C/D/F rule rather than each instructor inventing a different tail cutoff. Ed-tech products that already store class mean and standard deviation can attach a curved letter at the edge without shipping a second grading engine.

Content sites that rank for bell curve grade calculator or grading on a curve queries benefit from a free in-browser path that matches the paid automation path byte-for-byte on the same analytic library. Failed validation does not consume balance.

Lecture course curved finals

Turn a student exam score plus the posted class mean and sigma into a syllabus letter (A–F) for the gradebook.

Office-hours and parent explanations

Show z-score, percentile, and letter so a family can see why the same raw mark is a B in one section and a C in another.

What z-score bands map to A, B, C, D, and F?

A is z ≥ 1.5, B is 0.5 ≤ z < 1.5, C is −0.5 ≤ z < 0.5, D is −1.5 ≤ z < −0.5, and F is z < −1.5. C is the average band around the class mean.

Is this the same as converting a percent to a letter on a 90/80/70/60 scale?

No. A fixed percent table ignores the class. This tool ranks one raw score against the class mean and standard deviation, so the same percent can be different letters in different sections.

What if the class standard deviation is zero?

When every score equals the mean, σ is zero and z is undefined. Provide a positive std.

How many students get an A on this bell curve?

In a perfectly normal class, about 7 percent land in A and another 7 percent in F, roughly 24 percent each in B and D, and about thirty-eight percent in C, the average band.

What happens when a score lands exactly on a cutoff?

Each letter includes its lower edge, except F. A z-score of exactly 1.5 is an A, exactly 0.5 is a B, and exactly minus 1.5 is a D rather than an F.

Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.

POSThttps://api.kit.forhosting.com/edu/bell-curve-grade

Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.

curl -X POST https://api.kit.forhosting.com/edu/bell-curve-grade \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"score":88,"mean":75,"std":8}'
{
  "score": 88,
  "mean": 75,
  "std": 8
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "edu.bell_curve_grade",
  "status": "queued",
  "_links": {
    "result": "/tasks/tsk_…/result"
  }
}

The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.

Per request$0.002

Published price — no tokens, no invented credits. A failed task is never charged.

HTTPCodeMeaning
401unauthorizedMissing or invalid API key.
402insufficient_balanceYour balance doesn't cover the task price.
404unknown_typeThat task type doesn't exist.
429rate_limitedToo many requests. Use the webhook instead of polling.

The same pure analytic module powers the free browser tool and the API path, so a gradebook script and a classroom check never disagree.

How a raw score becomes a curved letter grade

The placement step is the z-score: z equals the score minus the class mean, divided by the class standard deviation. The endpoint never invents a mean or a sigma from a roster; you supply those two summary statistics, and it only ranks one score against them.

Input contract, response fields, and validation

Numeric strings that coerce to finite numbers are accepted. Example: score 88, mean 75, std 8 yields z 1.625 and letter A. Example: score 60, mean 75, std 8 yields z minus 1.875 and letter F. POST a JSON body with three required finite numbers: score, mean, and std. score is the student raw mark on the same scale as the class mean—percent, points, SAT, or any other linear scale. mean is the class mean μ. std is the class standard deviation σ and must be strictly positive; a zero or negative sigma makes z undefined and is rejected. Optional aliases are raw, value, and x for score; class_mean, mu, and average for mean; and sd, sigma, and standard_deviation for std, so thin clients can reuse familiar field names. Missing fields, empty strings, booleans, objects, and non-finite values fail with invalid_input and are not billed. On success the body echoes score, mean, and std, returns z_score, letter_grade as A through F, percentile as one hundred times the standard-normal CDF of z rounded to four decimals, interval as a compact band string such as z >= 1.5, expected_share as the theoretical percent of a normal class in that letter, direction as above_mean, at_mean, or below_mean, plus formula, scale, and a short message sentence for UI copy. Example: score 75, mean 75, std 10 yields z 0, letter C, and direction at_mean. Pair this endpoint with your own roster statistics if you start from a list of raw marks; this capability never estimates mean or sigma from a score list. Optional fields are omitted rather than null, and all names are DOM-safe snake_case for widgets and SDKs.

Where a bell-curve letter grade earns its keep

Tutoring centers and academic-success offices explain to families why an eighty-two became a B on a hard exam and a C on an easy one; a deterministic API lets those conversations start from the same numbers. Keep payloads tiny, pin letter_grade and z_score in tests, and you get reproducible curved letters for gradebook plugins, registrar scripts, and parent reports without standing up a full psychometrics stack of your own.

LMS and registrar automation

Attach a machine-stable letter_grade to stored class statistics using the same documented bands as the free browser tool.

How does a bell curve grade calculator assign a letter?

Send score, mean, and a positive std. The API computes z = (score − mean) / std and maps z onto A (z≥1.5), B (0.5≤z<1.5), C (−0.5≤z<0.5), D (−1.5≤z<−0.5), or F (z<−1.5).

What does the bell curve grade calculator cost?

The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.

Read the full KIT documentation →