Scale grade to new maximum
42 out of 50 becomes 84 out of 100, or 8.4 out of 10: the same 84% stretched onto the new maximum. Enter the points earned, the old maximum and the new one when a test or gradebook column changes its total. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Score
- 42
- Old max
- 50
- New max
- 100
- Scaled score
- 84
- Percentage
- 84
- Ratio
- 0.84
- Label
- 42/50 → 84/100
When a quiz, midterm, or rubric changes its point total, the same raw score no longer means the same thing on the new scale. A student who earned forty-two out of fifty needs a fair equivalent out of one hundred; a lab report scored eighteen out of twenty may need to appear on a ten-point column in the gradebook. This scale-grade-to-new-maximum calculator applies the transparent linear proportion scaled score equals score divided by the old maximum times the new maximum, so percentages stay constant while the displayed points match the updated ceiling. Extra credit above the original maximum is allowed and simply scales the same way, so bonus points remain visible after the conversion.
How proportional grade rescaling works
A score is always a pair of numbers: points earned and the maximum those points were measured against. When the maximum changes—because an exam is rewritten, a department standardizes columns to one hundred, or two sections used different rubrics—you keep the proportion of success and stretch it onto the new ceiling. Both routes are identical for finite positive maxima.
Example: forty-two out of fifty is eighty-four percent, which becomes eighty-four out of one hundred and eight point four out of ten. Example: fifteen out of twenty becomes seventy-five out of one hundred. Half-up rounding to a configurable number of decimal places keeps UI displays and automation goldens stable across runtimes.
The method is intentionally linear and policy-free: it does not invent letter bands, curve, or drop the lowest score. If your institution applies non-linear cutoffs after the scale change, apply those policies on top of the scaled number this tool returns.
Where rescaling a score to a new maximum fits real workflows
Teachers who merge sections after a point-total change need every historical mark rewritten onto the shared ceiling before computing term averages; a deterministic converter avoids spreadsheet drift and keeps every row on the same formula. Students checking how a midterm out of forty would look on a one-hundred-point syllabus column can use the free browser path without opening a calculator app. Advising offices and transcript helpers show parents a comparable percentage when raw points come from mixed rubrics.
Failed validation does not consume balance. Document the linear proportion beside the result, pin rounded scaled scores in tests, and you get reproducible gradebook conversions for teachers, students, and edge workers without maintaining a private spreadsheet of your own.
What you can do with it
Gradebook maximum changes
Rewrite historical quiz scores onto a new point ceiling when a department standardizes all columns to 100 or another shared maximum.
Cross-section and transfer comparison
Convert scores from rubrics with different maxima so advisors and registrars can compare student performance fairly.
LMS import and export scripts
Map external assignment scores into a course gradebook whose item maximum differs from the source system.
FAQ
How do you scale a grade to a new maximum?
For example, 42 out of 50 becomes 84 out of 100.
Does the percentage stay the same after rescaling?
Yes. The proportion of points earned is preserved, so the percentage of the original maximum equals the percentage of the new maximum for the scaled result.
Can a score above the old maximum be rescaled?
Yes. Extra credit above the original maximum is allowed and scales the same way, so bonus points stay visible after the conversion instead of being cut off at the new ceiling.
Does rescaling curve the grade or change letter bands?
No. The conversion is purely proportional: it keeps the same percentage and does not curve, assign letter grades or drop the lowest score. Apply any such policy afterwards to the rescaled number.
How many decimals does the rescaled score keep?
Two by default, and you can choose from zero to six. The rescaled score and the percentage are rounded half up, so 42 out of 50 on a ten-point column shows as 8.4.
Related tools
For developers — API access
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.
API endpoint
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.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/edu/scale-grade-new-max \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"score":42,"old_max":50,"new_max":100}'const res = await fetch("https://api.kit.forhosting.com/edu/scale-grade-new-max", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"score": 42,
"old_max": 50,
"new_max": 100
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/edu/scale-grade-new-max",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"score": 42,
"old_max": 50,
"new_max": 100
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/edu/scale-grade-new-max", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"score":42,"old_max":50,"new_max":100}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"score":42,"old_max":50,"new_max":100}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/edu/scale-grade-new-max", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"score": 42,
"old_max": 50,
"new_max": 100
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "edu.scale_grade_new_max",
"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.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
Teachers, students, advisors, and LMS integrations use the same pure arithmetic online or through the API, without spreadsheets, without model tokens, and without network side effects.
How proportional grade rescaling works
Mathematically that is scaled_score equals score divided by old_max, then multiplied by new_max. Equivalently, compute the percentage first as score over old_max times one hundred, then multiply that percentage by new_max over one hundred. The capability always echoes score, old_max, new_max, the scaled result, the percentage, the exact ratio, the formula string, a short label such as 42/50 → 84/100, and a human message you can show beside a gradebook cell.
Input contract, validation, and response fields
Send a JSON object with three required numbers. score is the points earned and must be a non-negative finite value; numeric strings are accepted, while booleans, objects, and empty strings are rejected. Aliases points, earned, value, and marks resolve to the same field for thin clients. old_max is the original maximum and must be strictly greater than zero; aliases include from_max, current_max, original_max, and out_of. new_max is the target maximum after rescaling and must also be strictly greater than zero; aliases include to_max, target_max, and new_out_of. Optional decimals is an integer from zero through six and defaults to two; it controls half-up rounding of scaled_score and percentage, and also floors display precision on the echoed inputs. On success the body returns score, old_max, new_max, scaled_score, percentage, ratio, formula restating scaled_score equals score over old_max times new_max, label as a compact before-and-after string, decimals, and message. Scores above old_max are allowed so extra-credit marks still convert; zero scores produce a zero scaled result. Missing fields, non-finite values, a non-positive old_max or new_max, or a negative score throw invalid_input and are not billed. Pair the numeric scaled_score with your own letter table only if your syllabus publishes that table—this endpoint never invents letter grades from the proportion alone.
Where rescaling a score to a new maximum fits real workflows
LMS plugins and grade-export scripts call the API when importing external scores that used a different maximum than the destination course.
Technical questions
What if the score is higher than the old maximum?
Extra credit is allowed. Scores above old_max still convert with the same proportion and may produce a scaled_score above new_max.
Which values are rejected?
Missing score, old_max, or new_max; non-finite or non-numeric values; score below zero; old_max or new_max not greater than zero. Those fail with invalid_input and are not billed.
What does the scale-grade-to-new-maximum tool cost?
The browser tool is free. API requests use prepaid KIT balance at $0.002 per successful call; invalid input is not billed.