Hole
| Upper deviation (ES) | | µm |
| Lower deviation (EI) | | µm |
| Tolerance (IT) | | µm |
| Max size | | mm |
| Min size | | mm |
| Centre of tolerance | | mm |
Shaft
| Upper deviation (es) | | µm |
| Lower deviation (ei) | | µm |
| Tolerance (IT) | | µm |
| Max size | | mm |
| Min size | | mm |
| Centre of tolerance | | mm |
What Is a Fit?
A fit describes the dimensional relationship between two mating parts — typically a hole and a shaft — that share the same nominal size but may have tolerance zones that differ in position and width. The permissible limit dimensions are governed by ISO 286-1:2010 and ISO 286-2:2010.
Three Pieces Define Every Fit
- Nominal dimension — the basic diameter of the hole or shaft.
- Tolerance grade (IT) — numbered 01–18. A lower number means a tighter, narrower tolerance band.
- Tolerance position — designated by a letter (A–ZC for holes, a–zc for shafts). The letter sets where the tolerance zone sits relative to the nominal size.
Fit Types
- Clearance fit — the largest shaft is always smaller than the smallest hole, guaranteeing a gap.
- Interference fit (press fit) — the smallest shaft is always larger than the largest hole, requiring force to assemble.
- Transition fit — depending on actual part dimensions, the result can be either a slight clearance or a slight interference.
This calculator determines the upper and lower deviations, maximum and minimum sizes, and centre of tolerance for any combination of nominal dimension and tolerance class. When both a hole and shaft are selected, it also classifies the resulting fit type.
.fc { font-family: inherit; max-width: 740px; margin: 0 auto; }
/* Inputs: Hole | Nominal | Shaft in one row */
.fc-inputs {
display: grid; grid-template-columns: 1fr auto 1fr; gap: 20px;
align-items: end; margin-bottom: 16px;
}
@media (max-width: 600px) {
.fc-inputs { grid-template-columns: 1fr; gap: 14px; }
.fc-nom-wrap { order: -1; }
}
/* Side panels */
.fc-side { display: flex; flex-direction: column; gap: 8px; }
.fc-side-title {
font-size: 11px; font-weight: 700; text-transform: uppercase;
letter-spacing: 0.1em; color: #999; margin: 0;
}
.fc-select {
padding: 10px 30px 10px 12px; font-size: 15px; font-family: inherit;
border: 1px solid #d0d0d0; border-radius: 6px;
background: #fff; color: #1a1a1a; width: 100%;
transition: border-color 0.15s;
-webkit-appearance: none; appearance: none;
background-image: url(“data:image/svg+xml,%3Csvg xmlns=’http://www.w3.org/2000/svg’ width=’12’ height=’8′ viewBox=’0 0 12 8’%3E%3Cpath d=’M1 1l5 5 5-5′ stroke=’%23555′ stroke-width=’1.5′ fill=’none’ stroke-linecap=’round’/%3E%3C/svg%3E”);
background-repeat: no-repeat; background-position: right 10px center;
}
.fc-select:focus { outline: none; border-color: #1a1a1a; }
/* Nominal dimension — centered, prominent */
.fc-nom-wrap {
display: flex; flex-direction: column; align-items: center; gap: 6px;
min-width: 140px;
}
.fc-nom-label {
font-size: 11px; font-weight: 700; text-transform: uppercase;
letter-spacing: 0.08em; color: #999; text-align: center;
}
.fc-nom-input {
width: 120px; padding: 10px 12px; font-size: 18px; font-weight: 700;
font-family: inherit; text-align: center;
border: 2px solid #1a1a1a; border-radius: 8px;
background: #fff; color: #1a1a1a;
transition: border-color 0.15s;
}
.fc-nom-input:focus { outline: none; border-color: #444; }
.fc-nom-input::placeholder { color: #ccc; font-weight: 400; }
/* Error */
.fc-error {
padding: 10px 14px; border-radius: 6px; font-size: 13px;
background: #fff3cd; border-left: 3px solid #e6a817; color: #7a5c00;
margin-bottom: 16px; text-align: center;
}
/* Results */
.fc-results { animation: fc-in 0.22s ease; }
@keyframes fc-in {
from { opacity: 0; transform: translateY(6px); }
to { opacity: 1; transform: translateY(0); }
}
/* Fit badge */
.fc-fit-badge {
display: inline-block; padding: 6px 18px; border-radius: 20px;
font-size: 13px; font-weight: 700; text-transform: uppercase;
letter-spacing: 0.05em; margin-bottom: 20px;
}
.fc-fit-badge–clearance { background: #d4edda; color: #155724; }
.fc-fit-badge–transition { background: #fff3cd; color: #856404; }
.fc-fit-badge–interference { background: #f8d7da; color: #721c24; }
/* Results pair */
.fc-results-pair { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; margin-bottom: 16px; }
@media (max-width: 600px) { .fc-results-pair { grid-template-columns: 1fr; gap: 16px; } }
.fc-result-side h4 {
font-size: 14px; font-weight: 700; margin: 0 0 10px;
padding-bottom: 8px; border-bottom: 2px solid #1a1a1a;
}
.fc-result-side h4 span { font-weight: 400; color: #888; }
/* Result table */
.fc-result-table { width: 100%; border-collapse: collapse; font-size: 13px; }
.fc-result-table td { padding: 6px 0; }
.fc-result-table td:first-child { color: #666; }
.fc-result-table td:last-child { color: #888; width: 30px; text-align: right; }
.fc-val {
text-align: right; font-weight: 700; color: #1a1a1a;
font-variant-numeric: tabular-nums; padding-right: 6px;
}
.fc-sep td { padding-top: 12px; border-top: 1px solid #e8e8e8; }
/* Fit details */
.fc-fit-details {
font-size: 13px; color: #666; padding: 10px 14px;
background: #f8f8f8; border-radius: 6px; line-height: 1.6;
}
/* About section */
.fc-about {
margin-top: 48px; padding-top: 32px;
border-top: 1px solid #e8e8e8;
font-size: 14px; line-height: 1.7; color: #444;
}
.fc-about h3 {
font-size: 15px; font-weight: 700; color: #1a1a1a;
margin: 24px 0 8px;
}
.fc-about h3:first-child { margin-top: 0; }
.fc-about p { margin: 0 0 12px; }
.fc-about ul {
margin: 0 0 12px; padding-left: 20px;
}
.fc-about li { margin-bottom: 6px; }
(function(){
var DR = [
{min:0,max:3},{min:3,max:6},{min:6,max:10},{min:10,max:18},{min:18,max:30},
{min:30,max:50},{min:50,max:80},{min:80,max:120},{min:120,max:180},
{min:180,max:250},{min:250,max:315},{min:315,max:400},{min:400,max:500}
];
var SD = {
‘a’:[-270,-270,-280,-290,-300,-310,-320,-340,-360,-380,-410,-440,-480],
‘b’:[-140,-140,-150,-150,-160,-170,-180,-190,-200,-210,-230,-240,-260],
‘c’:[-60,-70,-80,-95,-110,-120,-140,-150,-170,-180,-200,-210,-230],
‘d’:[-20,-30,-40,-50,-65,-80,-100,-120,-145,-170,-190,-210,-230],
‘e’:[-14,-20,-25,-32,-40,-50,-60,-72,-85,-100,-110,-125,-135],
‘f’:[-6,-10,-13,-16,-20,-25,-30,-36,-43,-50,-56,-62,-68],
‘g’:[-2,-4,-5,-6,-7,-9,-10,-12,-14,-15,-17,-18,-20],
‘h’:[0,0,0,0,0,0,0,0,0,0,0,0,0],
‘js’:’sym’,
‘k’:[0,1,1,1,2,2,2,3,3,4,4,4,5],
‘m’:[2,4,6,7,8,9,11,13,15,17,20,21,23],
‘n’:[4,8,10,12,15,17,20,23,27,31,34,37,40],
‘p’:[6,12,15,18,22,26,32,37,43,50,56,62,68],
‘r’:[10,15,19,23,28,34,41,48,55,63,72,78,86],
‘s’:[14,19,23,28,35,43,53,59,68,79,88,98,108],
‘t’:[null,null,null,33,41,48,60,68,79,92,101,114,126],
‘u’:[18,28,34,40,48,60,75,90,106,122,137,151,165],
‘v’:[null,null,null,null,56,70,87,102,122,140,155,171,195],
‘x’:[20,35,42,50,64,80,102,120,146,172,191,214,232],
‘y’:[null,null,null,null,75,95,122,148,178,210,236,262,290],
‘z’:[26,42,52,62,80,97,124,149,180,212,238,264,292],
‘za’:[32,50,67,77,98,120,156,187,228,264,300,332,370],
‘zb’:[40,60,80,95,119,146,190,228,278,325,370,412,455],
‘zc’:[60,80,97,117,148,180,234,280,340,396,450,500,555]
};
var HD = {
‘A’:[270,270,280,290,300,310,320,340,360,380,410,440,480],
‘B’:[140,140,150,150,160,170,180,190,200,210,230,240,260],
‘C’:[60,70,80,95,110,120,140,150,170,180,200,210,230],
‘D’:[20,30,40,50,65,80,100,120,145,170,190,210,230],
‘E’:[14,20,25,32,40,50,60,72,85,100,110,125,135],
‘F’:[6,10,13,16,20,25,30,36,43,50,56,62,68],
‘G’:[2,4,5,6,7,9,10,12,14,15,17,18,20],
‘H’:[0,0,0,0,0,0,0,0,0,0,0,0,0],
‘JS’:’sym’,
‘K’:[0,-1,-1,-1,-2,-2,-2,-3,-3,-4,-4,-4,-5],
‘M’:[-2,-4,-6,-7,-8,-9,-11,-13,-15,-17,-20,-21,-23],
‘N’:[-4,-8,-10,-12,-15,-17,-20,-23,-27,-31,-34,-37,-40],
‘P’:[-6,-12,-15,-18,-22,-26,-32,-37,-43,-50,-56,-62,-68],
‘R’:[-10,-15,-19,-23,-28,-34,-41,-48,-55,-63,-72,-78,-86],
‘S’:[-14,-19,-23,-28,-35,-43,-53,-59,-68,-79,-88,-98,-108],
‘T’:[null,null,null,-33,-41,-48,-60,-68,-79,-92,-101,-114,-126],
‘U’:[-18,-28,-34,-40,-48,-60,-75,-90,-106,-122,-137,-151,-165],
‘V’:[null,null,null,null,-56,-70,-87,-102,-122,-140,-155,-171,-195],
‘X’:[-20,-35,-42,-50,-64,-80,-102,-120,-146,-172,-191,-214,-232],
‘Y’:[null,null,null,null,-75,-95,-122,-148,-178,-210,-236,-262,-290],
‘Z’:[-26,-42,-52,-62,-80,-97,-124,-149,-180,-212,-238,-264,-292],
‘ZA’:[-32,-50,-67,-77,-98,-120,-156,-187,-228,-264,-300,-332,-370],
‘ZB’:[-40,-60,-80,-95,-119,-146,-190,-228,-278,-325,-370,-412,-455],
‘ZC’:[-60,-80,-97,-117,-148,-180,-234,-280,-340,-396,-450,-500,-555]
};
var SCL = [‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’];
var HCL = [‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’];
var IT = {
‘5’:[4,5,6,8,9,11,13,15,18,20,23,25,27],
‘6’:[6,8,9,11,13,16,19,22,25,29,32,36,40],
‘7’:[10,12,15,18,21,25,30,35,40,46,52,57,63],
‘8’:[14,18,22,27,33,39,46,54,63,72,81,89,97],
‘9’:[25,30,36,43,52,62,74,87,100,115,130,140,155],
’10’:[40,48,58,70,84,100,120,140,160,185,210,230,250],
’11’:[60,75,90,110,130,160,190,220,250,290,320,360,400],
’12’:[100,120,150,180,210,250,300,350,400,460,520,570,630],
’13’:[140,180,220,270,330,390,460,540,630,720,810,890,970]
};
var GRADES = [‘5′,’6′,’7′,’8′,’9′,’10’,’11’,’12’,’13’];
// Build combined dropdowns
function buildOptions(sel, letters, devMap, defaultVal) {
var html = ‘– Select –‘;
var groups = [
{label:’Clearance’, letters: letters.filter(function(l){ return ‘abcdefghABCDEFGH’.indexOf(l) !== -1 || ‘abcdefghABCDEFGH’.indexOf(l.charAt(0)) !== -1; })},
{label:’Symmetric’, letters: letters.filter(function(l){ return l === ‘js’ || l === ‘JS’; })},
{label:’Transition / Interference’, letters: letters.filter(function(l){ return ‘abcdefghABCDEFGH’.indexOf(l) === -1 && ‘abcdefghABCDEFGH’.indexOf(l.charAt(0)) === -1 && l !== ‘js’ && l !== ‘JS’; })}
];
for (var g = 0; g < groups.length; g++) {
if (!groups[g].letters.length) continue;
html += '’;
for (var i = 0; i < groups[g].letters.length; i++) {
var lt = groups[g].letters[i];
for (var j = 0; j < GRADES.length; j++) {
var code = lt + GRADES[j];
var sel_attr = (code === defaultVal) ? ' selected' : '';
html += '’ + code + ”;
}
}
html += ”;
}
sel.innerHTML = html;
}
var HOLE_LETTERS = [‘A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’JS’,’K’,’M’,’N’,’P’,’R’,’S’,’T’,’U’,’V’,’X’,’Y’,’Z’,’ZA’,’ZB’,’ZC’];
var SHAFT_LETTERS = [‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’js’,’k’,’m’,’n’,’p’,’r’,’s’,’t’,’u’,’v’,’x’,’y’,’z’,’za’,’zb’,’zc’];
var holeSel = document.getElementById(‘fc-hole’);
var shaftSel = document.getElementById(‘fc-shaft’);
buildOptions(holeSel, HOLE_LETTERS, HD, ‘H7’);
buildOptions(shaftSel, SHAFT_LETTERS, SD, ‘h6’);
// Parse combined code like “H7″ -> {letter:”H”, grade:”7″}
function parseCode(code) {
if (!code) return null;
var i = 0;
while (i < code.length && (code.charCodeAt(i) 57)) i++;
if (i === 0 || i === code.length) return null;
return {letter: code.substring(0, i), grade: code.substring(i)};
}
function ri(d) {
for (var i = 0; i DR[i].min && d = 0 ? ‘+’ : ”) + (Math.round(v*10)/10); }
function fmtM(v) { return v.toFixed(3); }
var nomEl = document.getElementById(‘fc-nom’);
var resEl = document.getElementById(‘fc-results’);
var errEl = document.getElementById(‘fc-error’);
var badge = document.getElementById(‘fc-fit-badge’);
var details = document.getElementById(‘fc-fit-details’);
function run() {
errEl.style.display = ‘none’;
resEl.style.display = ‘none’;
var nom = parseFloat(nomEl.value);
if (!nomEl.value || isNaN(nom)) return;
if (nom 500) {
errEl.textContent = ‘Nominal dimension must be between 0 and 500 mm.’;
errEl.style.display = ‘block’; return;
}
var hc = parseCode(holeSel.value);
var sc = parseCode(shaftSel.value);
if (!hc && !sc) return;
var hr = hc ? calc(nom, hc.letter, hc.grade, HD, HCL) : null;
var sr = sc ? calc(nom, sc.letter, sc.grade, SD, SCL) : null;
if (hc && !hr) {
errEl.textContent = holeSel.value + ‘ is not defined for this diameter range.’;
errEl.style.display = ‘block’; return;
}
if (sc && !sr) {
errEl.textContent = shaftSel.value + ‘ is not defined for this diameter range.’;
errEl.style.display = ‘block’; return;
}
if (hr) {
document.getElementById(‘fc-hole-label’).textContent = holeSel.value;
document.getElementById(‘fc-h-es’).textContent = fmtD(hr.upper);
document.getElementById(‘fc-h-ei’).textContent = fmtD(hr.lower);
document.getElementById(‘fc-h-tol’).textContent = hr.tol;
document.getElementById(‘fc-h-max’).textContent = fmtM(hr.max);
document.getElementById(‘fc-h-min’).textContent = fmtM(hr.min);
document.getElementById(‘fc-h-ctr’).textContent = fmtM(hr.ctr);
}
if (sr) {
document.getElementById(‘fc-shaft-label’).textContent = shaftSel.value;
document.getElementById(‘fc-s-es’).textContent = fmtD(sr.upper);
document.getElementById(‘fc-s-ei’).textContent = fmtD(sr.lower);
document.getElementById(‘fc-s-tol’).textContent = sr.tol;
document.getElementById(‘fc-s-max’).textContent = fmtM(sr.max);
document.getElementById(‘fc-s-min’).textContent = fmtM(sr.min);
document.getElementById(‘fc-s-ctr’).textContent = fmtM(sr.ctr);
}
document.getElementById(‘fc-hole-side’).style.display = hr ? ” : ‘none’;
document.getElementById(‘fc-shaft-side’).style.display = sr ? ” : ‘none’;
if (hr && sr) {
var fitType, fitClass, fitText;
if (sr.upper = hr.upper) {
fitType = ‘Interference fit’; fitClass = ‘fc-fit-badge–interference’;
fitText = ‘Max interference: ‘ + fmtM(sr.max – hr.min) + ‘ mm u00b7 Min interference: ‘ + fmtM(sr.min – hr.max) + ‘ mm’;
} else {
fitType = ‘Transition fit’; fitClass = ‘fc-fit-badge–transition’;
fitText = ‘Max clearance: ‘ + fmtM(hr.max – sr.min) + ‘ mm u00b7 Max interference: ‘ + fmtM(sr.max – hr.min) + ‘ mm’;
}
badge.textContent = fitType;
badge.className = ‘fc-fit-badge ‘ + fitClass;
badge.style.display = ”;
details.textContent = ‘u00d8’ + nom + ‘ ‘ + holeSel.value + ‘/’ + shaftSel.value + ‘ u2014 ‘ + fitText;
details.style.display = ”;
} else {
badge.style.display = ‘none’;
details.style.display = ‘none’;
}
resEl.style.display = ‘block’;
}
nomEl.addEventListener(‘input’, run);
holeSel.addEventListener(‘change’, run);
shaftSel.addEventListener(‘change’, run);
})();