ISO 286 Fit Calculator

Select nominal size and tolerance class to calculate shaft and hole deviations instantly.

Hole

Shaft

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); })();

Need Precision-Machined Parts?

We manufacture shafts and bores to any ISO 286 tolerance class. Contact us for a quote with guaranteed dimensional accuracy.