ForHosting KIT · Developer Utilities

Stanine from percentile calculator

This stanine from percentile calculator converts a percentile rank into the standard one-to-nine reporting scale used in many educational and psychological assessments.

● BetaFree · in your browser
Use it from WebAPIEmailTelegramApp soon

Enter any finite percentile rank from 1 through 99, including a decimal, and receive its stanine, the corresponding percentile interval, and a plain-language interpretation. The calculation uses fixed conventional boundaries, so it is deterministic and easy to audit. It is useful when a report provides percentile ranks but a comparison, summary table, or school record requires stanines.

What a stanine says about a percentile rank

A stanine condenses a percentile rank into one of nine broad score bands. The word combines “standard” and “nine,” and the scale is designed to make distributions easier to scan and compare. Stanine 1 covers percentile ranks 1 through 3, while stanine 9 covers ranks 96 through 99. The middle band, stanine 5, covers ranks 40 through 59. Because the center bands are wider than the bands at the extremes, the scale preserves a rough picture of a bell-shaped score distribution without pretending that every small percentile difference is important. This calculator returns the stanine number, the exact conventional percentile interval used for that result, and a short interpretation such as Average or Above average. A stanine is a reporting category, not a new test score and not a percentage correct. It describes relative standing in the norm group used by the original assessment. Therefore, the quality and relevance of that norm group remain essential when interpreting the converted result.

How the nine standard bands are applied

The conversion uses the conventional boundaries directly: percentiles 1–3 map to stanine 1; 4–10 to 2; 11–22 to 3; 23–39 to 4; 40–59 to 5; 60–76 to 6; 77–88 to 7; 89–95 to 8; and 96–99 to 9. Each upper boundary is inclusive. For example, 39 produces stanine 4, while 40 produces stanine 5. Decimal percentile ranks are accepted and compared against the same cut points, so 39.5 enters stanine 5 because it is greater than 39 and no greater than 59. The calculator does not round the submitted percentile before classification. It also rejects values below 1, above 99, missing values, and nonnumeric values rather than guessing what the user intended. This direct band lookup is deterministic: the same valid input always produces the same result. No sample data, test subject information, network request, random choice, date, or local setting can alter the conversion.

Using the result responsibly in test reporting

Use stanines when a compact categorical summary is more useful than the full percentile rank. They work well in dashboards, cumulative records, admissions summaries, and comparisons across subtests that already use compatible norming methods. Preserve the original percentile whenever possible, because converting to a stanine intentionally removes detail. Two learners at percentile ranks 41 and 58 both receive stanine 5, even though their precise relative positions differ. Conversely, ranks on opposite sides of a boundary can receive different stanines despite being close together. Do not use the conversion to combine results from unrelated tests, different age groups, or incompatible norm populations. The calculator does not assess reliability, confidence intervals, standard error, test validity, or whether a particular publisher uses modified boundaries. Check the assessment manual when an institution specifies its own reporting convention. For automated use, submit the percentile field and store both the returned stanine and percentile_range. API processing costs $0.002 per request, while the transparent fixed-band result remains suitable for independent verification.

Prepare a school score summary

Convert reported percentile ranks into compact stanines for a student record while retaining the returned source interval.

Normalize an assessment dashboard

Display a consistent one-to-nine category for assessments that provide percentile ranks on a compatible normative basis.

Check a boundary calculation

Confirm whether a percentile at or near a conventional cutoff belongs to the lower or higher stanine band.

What percentile ranks correspond to each stanine?

The standard bands are 1–3, 4–10, 11–22, 23–39, 40–59, 60–76, 77–88, 89–95, and 96–99 for stanines 1 through 9 respectively.

Are the band boundaries inclusive?

Yes. Each listed upper boundary belongs to that band: for example, percentile 39 is stanine 4 and percentile 40 is stanine 5.

Can I enter a decimal percentile rank?

Yes. A finite decimal from 1 through 99 is accepted and classified directly without rounding before the band lookup.

Is a stanine the same as a percentage score?

No. A stanine is a broad relative-position category derived from a norm-referenced percentile rank; it does not state the percentage of questions answered correctly.

Does every assessment use these exact cutoffs?

These are the conventional standard nine-band cutoffs. Consult the assessment publisher if its manual defines a modified reporting method.

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/stanine-from-percentile

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/stanine-from-percentile \
  -H "Authorization: Bearer $KIT_KEY" \
  -H "Content-Type: application/json" \
  -d '{"percentile":72}'
{
  "percentile": 72
}
{
  "task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
  "type": "edu.stanine_from_percentile",
  "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.

Read the full KIT documentation →