{"id":25009,"date":"2026-10-29T08:06:24","date_gmt":"2026-10-29T08:06:24","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=25009"},"modified":"2026-10-29T08:06:29","modified_gmt":"2026-10-29T08:06:29","slug":"cutting-speed-vc-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/fr\/cutting-speed-vc-calculator\/","title":{"rendered":"Cutting Speed (Vc) Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The Cutting Speed (Vc) Calculator helps CNC operators, machinists, and manufacturing engineers quickly calculate cutting speed, spindle speed, and cutting diameter for machining applications. Using accurate formulas and flexible unit conversions, this tool simplifies machining parameter calculations in metric and imperial units. Whether you are optimizing CNC machining operations or selecting suitable cutting parameters, this calculator helps improve efficiency and supports more informed decisions. Always verify the results against tool manufacturer recommendations and machine operating limits.<\/p>\n\n\n\n<iframe class=\"vcc-frame skip-lazy no-lazyload\" data-no-lazy=\"1\" data-skip-lazy=\"1\" title=\"Cutting Speed (Vc) Calculator\" scrolling=\"no\" style=\"display:block !important;width:100% !important;max-width:900px !important;height:480px;border:0 !important;margin:0 auto !important;padding:0 !important;overflow:hidden;background:transparent;float:none !important\" srcdoc=\"&lt;!DOCTYPE html&gt;&#10;&lt;html lang=&quot;en&quot;&gt;&#10;&lt;head&gt;&#10;&lt;meta charset=&quot;UTF-8&quot;&gt;&#10;&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;&#10;&lt;title&gt;Cutting Speed (Vc) Calculator&lt;\/title&gt;&#10;&lt;style&gt;&#10;\/* =====================================================================&#10;   Cutting Speed (Vc) Calculator \u2014 every selector is scoped under .vcc-root&#10;   so the calculator never changes how the rest of a WordPress page looks.&#10;   ===================================================================== *\/&#10;.vcc-root{&#10;  --vcc-blue:#1e3a8a;--vcc-blue-2:#1d4ed8;--vcc-blue-soft:#e8eefb;--vcc-blue-line:#c7d4f0;&#10;  --vcc-bg:#f5f7fa;--vcc-card:#ffffff;--vcc-text:#1f2937;--vcc-heading:#111827;--vcc-muted:#5b6574;&#10;  --vcc-border:#d6dce5;--vcc-field:#fbfcfe;--vcc-danger:#b42318;--vcc-danger-bg:#fef3f2;&#10;  --vcc-radius:12px;--vcc-shadow:0 1px 2px rgba(16,24,40,.05),0 4px 12px rgba(16,24,40,.05);&#10;  font-family:system-ui,-apple-system,&quot;Segoe UI&quot;,Roboto,&quot;Helvetica Neue&quot;,Arial,&quot;Noto Sans&quot;,sans-serif;&#10;  font-size:16px;line-height:1.6;color:var(--vcc-text);background:var(--vcc-bg);&#10;  max-width:900px;margin:0 auto;padding:28px 18px 36px;text-align:left;border-radius:16px;&#10;  -webkit-text-size-adjust:100%;&#10;}&#10;.vcc-root *,.vcc-root *::before,.vcc-root *::after{box-sizing:border-box}&#10;.vcc-root [hidden]{display:none !important}&#10;.vcc-root h1,.vcc-root h2,.vcc-root h3{font-family:inherit;color:var(--vcc-heading);line-height:1.25;margin:0 0 .55em;padding:0;letter-spacing:normal;text-transform:none;font-weight:700;border:0;background:none}&#10;.vcc-root h1{font-size:clamp(1.6rem,3.4vw,2.1rem)}&#10;.vcc-root h2{font-size:clamp(1.2rem,2.3vw,1.4rem)}&#10;.vcc-root h3{font-size:1.02rem}&#10;.vcc-root p{margin:0 0 .85em;padding:0}&#10;.vcc-root ul{margin:0 0 .9em;padding-left:1.3em}&#10;.vcc-root li{margin:0 0 .4em}&#10;.vcc-root strong{font-weight:700}&#10;&#10;\/* ---------- cards \/ layout ---------- *\/&#10;.vcc-root .vcc-card{background:var(--vcc-card);border:1px solid var(--vcc-border);border-radius:var(--vcc-radius);box-shadow:var(--vcc-shadow);padding:22px}&#10;.vcc-root .vcc-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;align-items:start}&#10;&#10;\/* ---------- mode selector ---------- *\/&#10;.vcc-root .vcc-modes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;background:#e9edf4;padding:4px;border-radius:10px;margin:0 0 18px;border:0;min-width:0}&#10;.vcc-root .vcc-modes legend{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}&#10;.vcc-root .vcc-mode{position:relative;display:block;margin:0;cursor:pointer}&#10;.vcc-root .vcc-mode input{position:absolute;opacity:0;width:1px;height:1px;margin:0}&#10;.vcc-root .vcc-mode span{display:block;text-align:center;padding:9px 6px;border-radius:8px;font-size:.9rem;font-weight:600;color:var(--vcc-muted);line-height:1.2;transition:background .15s,color .15s}&#10;.vcc-root .vcc-mode span small{display:block;font-weight:500;font-size:.75rem;opacity:.85;margin-top:3px}&#10;.vcc-root .vcc-mode:hover span{color:var(--vcc-blue)}&#10;.vcc-root .vcc-mode input:checked + span{background:#fff;color:var(--vcc-blue);box-shadow:0 1px 3px rgba(16,24,40,.12)}&#10;.vcc-root .vcc-mode input:focus-visible + span{outline:2px solid var(--vcc-blue-2);outline-offset:1px}&#10;&#10;\/* ---------- fields ---------- *\/&#10;.vcc-root .vcc-field{margin:0 0 15px;min-width:0}&#10;.vcc-root .vcc-field &gt; label{display:block;font-size:.88rem;font-weight:600;margin:0 0 5px;line-height:1.3;color:var(--vcc-text)}&#10;.vcc-root .vcc-inline{display:flex;gap:8px;align-items:stretch}&#10;.vcc-root .vcc-inline .vcc-input{flex:1 1 auto;min-width:0}&#10;.vcc-root .vcc-inline .vcc-select{flex:0 0 auto;width:auto;min-width:104px}&#10;.vcc-root .vcc-suffix{position:relative}&#10;.vcc-root .vcc-suffix .vcc-input{padding-right:52px}&#10;.vcc-root .vcc-suffix-u{position:absolute;right:12px;top:50%;transform:translateY(-50%);font-size:.84rem;color:var(--vcc-muted);pointer-events:none}&#10;.vcc-root .vcc-input,.vcc-root .vcc-select{&#10;  display:block;width:100%;height:44px;margin:0;padding:8px 12px;font:inherit;font-size:15px;line-height:1.3;color:var(--vcc-text);&#10;  background-color:var(--vcc-field);border:1px solid var(--vcc-border);border-radius:8px;box-shadow:none;outline:none;&#10;  transition:border-color .15s,box-shadow .15s;max-width:none;min-height:0;text-transform:none;letter-spacing:normal}&#10;.vcc-root .vcc-select{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding-right:32px;cursor:pointer;&#10;  background-image:url(&quot;data:image\/svg+xml,%3Csvg xmlns=&#x27;http:\/\/www.w3.org\/2000\/svg&#x27; width=&#x27;12&#x27; height=&#x27;8&#x27; viewBox=&#x27;0 0 12 8&#x27;%3E%3Cpath d=&#x27;M1 1.5l5 5 5-5&#x27; fill=&#x27;none&#x27; stroke=&#x27;%231e3a8a&#x27; stroke-width=&#x27;1.8&#x27; stroke-linecap=&#x27;round&#x27; stroke-linejoin=&#x27;round&#x27;\/%3E%3C\/svg%3E&quot;);&#10;  background-repeat:no-repeat;background-position:right 11px center;background-size:12px 8px}&#10;.vcc-root .vcc-input:hover,.vcc-root .vcc-select:hover{border-color:#b6c0ce}&#10;.vcc-root .vcc-input:focus,.vcc-root .vcc-select:focus{border-color:var(--vcc-blue-2);box-shadow:0 0 0 3px rgba(29,78,216,.18);background-color:#fff}&#10;.vcc-root .vcc-input.vcc-invalid{border-color:var(--vcc-danger);background-color:var(--vcc-danger-bg)}&#10;.vcc-root .vcc-err{color:var(--vcc-danger);font-size:.83rem;margin:5px 0 0;line-height:1.35}&#10;.vcc-root .vcc-help{color:var(--vcc-muted);font-size:.8rem;margin:5px 0 0;line-height:1.35}&#10;&#10;\/* ---------- buttons ---------- *\/&#10;.vcc-root .vcc-btns{display:flex !important;justify-content:center !important;width:100% !important;margin:8px 0 0 !important;padding:0 !important;float:none !important;clear:both}&#10;.vcc-root .vcc-btn{display:inline-flex;align-items:center;justify-content:center;height:44px;padding:0 22px;margin:0;font:inherit;font-size:.95rem;font-weight:650;line-height:1;&#10;  border-radius:8px;border:1px solid var(--vcc-border);background:#fff;color:var(--vcc-blue);cursor:pointer;text-decoration:none;text-transform:none;letter-spacing:normal;box-shadow:none;&#10;  transition:background .15s,border-color .15s;white-space:nowrap;width:auto;min-width:0;float:none;position:static}&#10;.vcc-root .vcc-btn:hover{background:var(--vcc-blue-soft);border-color:var(--vcc-blue-line);color:var(--vcc-blue)}&#10;.vcc-root .vcc-btn:focus-visible{outline:2px solid var(--vcc-blue-2);outline-offset:2px}&#10;.vcc-root .vcc-btn-primary{background:var(--vcc-blue);border-color:var(--vcc-blue);color:#fff;flex:0 0 auto;min-width:200px;margin:0 auto !important}&#10;.vcc-root .vcc-btn-primary:hover{background:#172f73;border-color:#172f73;color:#fff}&#10;&#10;\/* ---------- results ---------- *\/&#10;.vcc-root .vcc-results h2{margin-bottom:14px}&#10;.vcc-root .vcc-pcard{border-radius:12px;padding:18px 18px 16px;background:var(--vcc-blue);color:#fff}&#10;.vcc-root .vcc-pcard-label{font-size:.8rem;font-weight:700;text-transform:uppercase;letter-spacing:.05em;opacity:.9}&#10;.vcc-root .vcc-pcard-value{font-size:clamp(1.9rem,4.4vw,2.5rem);font-weight:800;line-height:1.15;margin-top:4px;word-break:break-word;font-variant-numeric:tabular-nums}&#10;.vcc-root .vcc-pcard-unit{font-size:.5em;font-weight:700;opacity:.92;margin-left:6px}&#10;.vcc-root .vcc-secondary{display:flex;justify-content:space-between;gap:10px;align-items:baseline;border:1px solid #e3e8f0;background:#fafbfd;border-radius:10px;padding:12px 14px;margin-top:10px}&#10;.vcc-root .vcc-secondary span:first-child{font-size:.86rem;color:var(--vcc-muted);font-weight:600}&#10;.vcc-root .vcc-secondary strong{font-size:1.1rem;color:var(--vcc-heading);font-variant-numeric:tabular-nums;text-align:right}&#10;.vcc-root .vcc-used{margin-top:14px;background:#0f1f45;color:#e6edff;border-radius:10px;padding:12px 14px;font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:.86rem;line-height:1.55;word-break:break-word}&#10;.vcc-root .vcc-used div + div{color:#c3d0f2}&#10;.vcc-root .vcc-note{font-size:.82rem;color:var(--vcc-muted);margin:12px 0 0}&#10;&#10;&#10;\/* ---------- responsive ---------- *\/&#10;@media (max-width:520px){&#10;  .vcc-root{padding:20px 12px 28px;border-radius:0}&#10;  .vcc-root .vcc-card{padding:16px}&#10;  .vcc-root .vcc-mode span{font-size:.82rem;padding:8px 4px}&#10;  .vcc-root .vcc-inline .vcc-select{min-width:92px}&#10;}&#10;@media (prefers-reduced-motion:reduce){.vcc-root *{transition:none !important}}&#10;html,body{margin:0;padding:0;background:transparent}&#10;&lt;\/style&gt;&#10;&lt;\/head&gt;&#10;&lt;body&gt;&#10;&#10;&lt;div class=&quot;vcc-root&quot; id=&quot;vcc-app&quot;&gt;&#10;&#10;  &lt;div class=&quot;vcc-grid&quot;&gt;&#10;&#10;    &lt;!-- ================= INPUTS ================= --&gt;&#10;    &lt;section class=&quot;vcc-card&quot; aria-labelledby=&quot;vcc-in-title&quot;&gt;&#10;      &lt;h2 id=&quot;vcc-in-title&quot;&gt;Calculator Inputs&lt;\/h2&gt;&#10;&#10;      &lt;form id=&quot;vcc-form&quot; novalidate autocomplete=&quot;off&quot;&gt;&#10;        &lt;fieldset class=&quot;vcc-modes&quot;&gt;&#10;          &lt;legend&gt;Calculation mode&lt;\/legend&gt;&#10;          &lt;label class=&quot;vcc-mode&quot;&gt;&lt;input type=&quot;radio&quot; name=&quot;vcc-mode&quot; value=&quot;vc&quot; checked&gt;&lt;span&gt;Cutting Speed&lt;small&gt;Find Vc&lt;\/small&gt;&lt;\/span&gt;&lt;\/label&gt;&#10;          &lt;label class=&quot;vcc-mode&quot;&gt;&lt;input type=&quot;radio&quot; name=&quot;vcc-mode&quot; value=&quot;rpm&quot;&gt;&lt;span&gt;Spindle Speed&lt;small&gt;Find n (RPM)&lt;\/small&gt;&lt;\/span&gt;&lt;\/label&gt;&#10;          &lt;label class=&quot;vcc-mode&quot;&gt;&lt;input type=&quot;radio&quot; name=&quot;vcc-mode&quot; value=&quot;dia&quot;&gt;&lt;span&gt;Diameter&lt;small&gt;Find D&lt;\/small&gt;&lt;\/span&gt;&lt;\/label&gt;&#10;        &lt;\/fieldset&gt;&#10;&#10;        &lt;!-- Target cutting speed (modes rpm, dia) --&gt;&#10;        &lt;div class=&quot;vcc-field&quot; id=&quot;vcc-wrap-vc&quot;&gt;&#10;          &lt;label for=&quot;vcc-vc&quot;&gt;Target Cutting Speed (Vc)&lt;\/label&gt;&#10;          &lt;div class=&quot;vcc-inline&quot;&gt;&#10;            &lt;input id=&quot;vcc-vc&quot; class=&quot;vcc-input&quot; type=&quot;text&quot; inputmode=&quot;decimal&quot; placeholder=&quot;e.g. 120&quot; aria-describedby=&quot;vcc-vc-err&quot;&gt;&#10;            &lt;select id=&quot;vcc-vc-unit&quot; class=&quot;vcc-select&quot; aria-label=&quot;Cutting speed unit&quot;&gt;&#10;              &lt;option value=&quot;m&quot;&gt;m\/min&lt;\/option&gt;&#10;              &lt;option value=&quot;ft&quot;&gt;ft\/min&lt;\/option&gt;&#10;            &lt;\/select&gt;&#10;          &lt;\/div&gt;&#10;          &lt;p class=&quot;vcc-err&quot; id=&quot;vcc-vc-err&quot; hidden&gt;&lt;\/p&gt;&#10;        &lt;\/div&gt;&#10;&#10;        &lt;!-- Spindle speed (modes vc, dia) --&gt;&#10;        &lt;div class=&quot;vcc-field&quot; id=&quot;vcc-wrap-n&quot;&gt;&#10;          &lt;label for=&quot;vcc-n&quot;&gt;Spindle Speed (n)&lt;\/label&gt;&#10;          &lt;div class=&quot;vcc-suffix&quot;&gt;&#10;            &lt;input id=&quot;vcc-n&quot; class=&quot;vcc-input&quot; type=&quot;text&quot; inputmode=&quot;decimal&quot; placeholder=&quot;e.g. 1500&quot; aria-describedby=&quot;vcc-n-err&quot;&gt;&#10;            &lt;span class=&quot;vcc-suffix-u&quot; aria-hidden=&quot;true&quot;&gt;RPM&lt;\/span&gt;&#10;          &lt;\/div&gt;&#10;          &lt;p class=&quot;vcc-err&quot; id=&quot;vcc-n-err&quot; hidden&gt;&lt;\/p&gt;&#10;        &lt;\/div&gt;&#10;&#10;        &lt;!-- Diameter (modes vc, rpm) --&gt;&#10;        &lt;div class=&quot;vcc-field&quot; id=&quot;vcc-wrap-d&quot;&gt;&#10;          &lt;label for=&quot;vcc-d&quot;&gt;Cutting Tool Diameter (D)&lt;\/label&gt;&#10;          &lt;div class=&quot;vcc-inline&quot;&gt;&#10;            &lt;input id=&quot;vcc-d&quot; class=&quot;vcc-input&quot; type=&quot;text&quot; inputmode=&quot;decimal&quot; placeholder=&quot;e.g. 25&quot; aria-describedby=&quot;vcc-d-err vcc-d-help&quot;&gt;&#10;            &lt;select id=&quot;vcc-d-unit&quot; class=&quot;vcc-select&quot; aria-label=&quot;Diameter unit&quot;&gt;&#10;              &lt;option value=&quot;mm&quot;&gt;mm&lt;\/option&gt;&#10;              &lt;option value=&quot;in&quot;&gt;inch&lt;\/option&gt;&#10;            &lt;\/select&gt;&#10;          &lt;\/div&gt;&#10;          &lt;p class=&quot;vcc-err&quot; id=&quot;vcc-d-err&quot; hidden&gt;&lt;\/p&gt;&#10;          &lt;p class=&quot;vcc-help&quot; id=&quot;vcc-d-help&quot;&gt;Milling\/drilling: tool diameter. Turning: workpiece diameter at the cutting point.&lt;\/p&gt;&#10;        &lt;\/div&gt;&#10;&#10;        &lt;!-- Output diameter unit (mode dia) --&gt;&#10;        &lt;div class=&quot;vcc-field&quot; id=&quot;vcc-wrap-dout&quot; hidden&gt;&#10;          &lt;label for=&quot;vcc-dout-unit&quot;&gt;Result Diameter Unit&lt;\/label&gt;&#10;          &lt;select id=&quot;vcc-dout-unit&quot; class=&quot;vcc-select&quot;&gt;&#10;            &lt;option value=&quot;mm&quot;&gt;mm&lt;\/option&gt;&#10;            &lt;option value=&quot;in&quot;&gt;inch&lt;\/option&gt;&#10;          &lt;\/select&gt;&#10;        &lt;\/div&gt;&#10;&#10;        &lt;div class=&quot;vcc-btns&quot;&gt;&#10;          &lt;button type=&quot;submit&quot; class=&quot;vcc-btn vcc-btn-primary&quot; id=&quot;vcc-calc&quot;&gt;Calculate&lt;\/button&gt;&#10;        &lt;\/div&gt;&#10;      &lt;\/form&gt;&#10;    &lt;\/section&gt;&#10;&#10;    &lt;!-- ================= RESULTS ================= --&gt;&#10;    &lt;section class=&quot;vcc-card vcc-results&quot; id=&quot;vcc-results&quot; aria-labelledby=&quot;vcc-res-title&quot; hidden&gt;&#10;      &lt;h2 id=&quot;vcc-res-title&quot;&gt;Results&lt;\/h2&gt;&#10;&#10;      &lt;div id=&quot;vcc-result&quot; aria-live=&quot;polite&quot;&gt;&#10;        &lt;div class=&quot;vcc-pcard&quot;&gt;&#10;          &lt;div class=&quot;vcc-pcard-label&quot; id=&quot;vcc-p-label&quot;&gt;Cutting Speed (Vc)&lt;\/div&gt;&#10;          &lt;div class=&quot;vcc-pcard-value&quot;&gt;&lt;span id=&quot;vcc-p-value&quot;&gt;\u2014&lt;\/span&gt;&lt;span class=&quot;vcc-pcard-unit&quot; id=&quot;vcc-p-unit&quot;&gt;&lt;\/span&gt;&lt;\/div&gt;&#10;        &lt;\/div&gt;&#10;        &lt;div class=&quot;vcc-secondary&quot; id=&quot;vcc-s-row&quot;&gt;&#10;          &lt;span id=&quot;vcc-s-label&quot;&gt;Equivalent Cutting Speed&lt;\/span&gt;&#10;          &lt;strong id=&quot;vcc-s-value&quot;&gt;\u2014&lt;\/strong&gt;&#10;        &lt;\/div&gt;&#10;        &lt;div class=&quot;vcc-used&quot; id=&quot;vcc-used&quot;&gt;&lt;\/div&gt;&#10;        &lt;p class=&quot;vcc-note&quot; id=&quot;vcc-note&quot;&gt;&lt;\/p&gt;&#10;      &lt;\/div&gt;&#10;    &lt;\/section&gt;&#10;  &lt;\/div&gt;&#10;&#10;&#10;&lt;\/div&gt;&#10;&#10;&lt;script&gt;&#10;\/* =====================================================================&#10;   Cutting Speed (Vc) Calculator \u2014 vanilla JavaScript, wrapped in an IIFE&#10;   so no globals are created. Internal units: mm, m\/min, RPM.&#10;   ===================================================================== *\/&#10;(function () {&#10;  &#x27;use strict&#x27;;&#10;&#10;  var root = document.getElementById(&#x27;vcc-app&#x27;);&#10;  if (!root || root.getAttribute(&#x27;data-vcc-ready&#x27;) === &#x27;1&#x27;) return;&#10;  root.setAttribute(&#x27;data-vcc-ready&#x27;, &#x27;1&#x27;);&#10;&#10;  function $(id) { return document.getElementById(id); }&#10;&#10;  var PI = Math.PI;&#10;  var MM_PER_IN = 25.4;&#10;  var FT_PER_M = 1 \/ 0.3048;          \/\/ 3.28084 ft\/min per m\/min&#10;&#10;  var MODES = {&#10;    vc:  { fields: [&#x27;n&#x27;, &#x27;d&#x27;],  formulas: [&#10;            [&#x27;Vc = (\u03c0 \u00d7 D \u00d7 n) \/ 1000&#x27;, &#x27;Vc in m\/min, D in mm&#x27;],&#10;            [&#x27;Vc = (\u03c0 \u00d7 D \u00d7 n) \/ 12&#x27;, &#x27;Vc in ft\/min, D in inches&#x27;] ] },&#10;    rpm: { fields: [&#x27;vc&#x27;, &#x27;d&#x27;], formulas: [&#10;            [&#x27;n = (1000 \u00d7 Vc) \/ (\u03c0 \u00d7 D)&#x27;, &#x27;Vc in m\/min, D in mm&#x27;],&#10;            [&#x27;n = (12 \u00d7 Vc) \/ (\u03c0 \u00d7 D)&#x27;, &#x27;Vc in ft\/min, D in inches&#x27;] ] },&#10;    dia: { fields: [&#x27;vc&#x27;, &#x27;n&#x27;], formulas: [&#10;            [&#x27;D = (1000 \u00d7 Vc) \/ (\u03c0 \u00d7 n)&#x27;, &#x27;Vc in m\/min, D in mm&#x27;],&#10;            [&#x27;D = (12 \u00d7 Vc) \/ (\u03c0 \u00d7 n)&#x27;, &#x27;Vc in ft\/min, D in inches&#x27;] ] }&#10;  };&#10;  var LABELS = { vc: &#x27;Target cutting speed&#x27;, n: &#x27;Spindle speed&#x27;, d: &#x27;Cutting tool diameter&#x27; };&#10;  var DEFAULTS = { mode: &#x27;vc&#x27;, vc: &#x27;&#x27;, vcUnit: &#x27;m&#x27;, n: &#x27;&#x27;, d: &#x27;&#x27;, dUnit: &#x27;mm&#x27;, doutUnit: &#x27;mm&#x27; };&#10;&#10;  var mode = DEFAULTS.mode;&#10;  var shown = false;   \/\/ results become visible after the first Calculate click&#10;&#10;  \/* ---------- number helpers ---------- *\/&#10;  \/** Strict parse: finite number, digits with optional decimal point \/ exponent. *\/&#10;  function parseNum(raw) {&#10;    var s = String(raw == null ? &#x27;&#x27; : raw).trim();&#10;    if (s === &#x27;&#x27;) return { empty: true };&#10;    if (\/^\\d+,\\d+$\/.test(s)) s = s.replace(&#x27;,&#x27;, &#x27;.&#x27;);        \/\/ allow decimal comma&#10;    if (!\/^[+-]?(\\d+\\.?\\d*|\\.\\d+)(e[+-]?\\d+)?$\/i.test(s)) return { bad: true };&#10;    var n = Number(s);&#10;    if (!isFinite(n)) return { bad: true };&#10;    return { ok: true, n: n };&#10;  }&#10;  function fixed(n, dp) {&#10;    return n.toLocaleString(&#x27;en-US&#x27;, { minimumFractionDigits: dp, maximumFractionDigits: dp });&#10;  }&#10;  function plain(n) { return Number(n.toPrecision(8)).toLocaleString(&#x27;en-US&#x27;, { maximumFractionDigits: 6 }); }&#10;&#10;  \/* ---------- validation ---------- *\/&#10;  function setErr(key, msg) {&#10;    var input = $(&#x27;vcc-&#x27; + key), err = $(&#x27;vcc-&#x27; + key + &#x27;-err&#x27;);&#10;    if (msg) {&#10;      input.classList.add(&#x27;vcc-invalid&#x27;); input.setAttribute(&#x27;aria-invalid&#x27;, &#x27;true&#x27;);&#10;      err.textContent = msg; err.hidden = false;&#10;    } else {&#10;      input.classList.remove(&#x27;vcc-invalid&#x27;); input.removeAttribute(&#x27;aria-invalid&#x27;);&#10;      err.textContent = &#x27;&#x27;; err.hidden = true;&#10;    }&#10;  }&#10;  function validate(key) {&#10;    var p = parseNum($(&#x27;vcc-&#x27; + key).value), label = LABELS[key];&#10;    var msg = null;&#10;    if (p.empty) msg = label + &#x27; is required.&#x27;;&#10;    else if (p.bad) msg = &#x27;Enter a valid number (e.g. 25 or 12.5).&#x27;;&#10;    else if (p.n &lt;= 0) msg = label + &#x27; must be greater than zero.&#x27;;&#10;    setErr(key, msg);&#10;    return msg ? null : p.n;&#10;  }&#10;  function clearAllErrors() { [&#x27;vc&#x27;, &#x27;n&#x27;, &#x27;d&#x27;].forEach(function (k) { setErr(k, null); }); }&#10;&#10;  \/* ---------- core formulas (metric internally) ---------- *\/&#10;  function vcMetric(dMm, n) { return (PI * dMm * n) \/ 1000; }        \/\/ m\/min&#10;  function rpmMetric(vcM, dMm) { return (1000 * vcM) \/ (PI * dMm); } \/\/ RPM&#10;  function diaMetric(vcM, n) { return (1000 * vcM) \/ (PI * n); }     \/\/ mm&#10;&#10;  \/* ---------- calculation ---------- *\/&#10;  function calculate() {&#10;    var need = MODES[mode].fields, vals = {}, ok = true;&#10;    need.forEach(function (k) { var v = validate(k); if (v === null) ok = false; else vals[k] = v; });&#10;    if (!ok) { hideResult(); return false; }&#10;&#10;    var r, used, note = &#x27;&#x27;;&#10;    if (mode === &#x27;vc&#x27;) {&#10;      var dUnit = $(&#x27;vcc-d-unit&#x27;).value;&#10;      var dMm = dUnit === &#x27;in&#x27; ? vals.d * MM_PER_IN : vals.d;&#10;      var vcM = vcMetric(dMm, vals.n), vcFt = vcM * FT_PER_M;&#10;      if (dUnit === &#x27;in&#x27;) {&#10;        r = { label: &#x27;Cutting Speed (Vc)&#x27;, value: fixed(vcFt, 2), unit: &#x27;ft\/min&#x27;,&#10;              sLabel: &#x27;Equivalent Cutting Speed&#x27;, sValue: fixed(vcM, 2) + &#x27; m\/min&#x27;, raw: [vcFt, vcM] };&#10;        used = [&#x27;Vc = (\u03c0 \u00d7 D \u00d7 n) \/ 12&#x27;,&#10;                &#x27;= (\u03c0 \u00d7 &#x27; + plain(vals.d) + &#x27; in \u00d7 &#x27; + plain(vals.n) + &#x27; RPM) \/ 12 = &#x27; + fixed(vcFt, 2) + &#x27; ft\/min&#x27;];&#10;      } else {&#10;        r = { label: &#x27;Cutting Speed (Vc)&#x27;, value: fixed(vcM, 2), unit: &#x27;m\/min&#x27;,&#10;              sLabel: &#x27;Equivalent Cutting Speed&#x27;, sValue: fixed(vcFt, 2) + &#x27; ft\/min&#x27;, raw: [vcM, vcFt] };&#10;        used = [&#x27;Vc = (\u03c0 \u00d7 D \u00d7 n) \/ 1000&#x27;,&#10;                &#x27;= (\u03c0 \u00d7 &#x27; + plain(vals.d) + &#x27; mm \u00d7 &#x27; + plain(vals.n) + &#x27; RPM) \/ 1000 = &#x27; + fixed(vcM, 2) + &#x27; m\/min&#x27;];&#10;      }&#10;      note = &#x27;Compare this value with the cutting speed recommended by your tool manufacturer for the workpiece material.&#x27;;&#10;    } else if (mode === &#x27;rpm&#x27;) {&#10;      var vU = $(&#x27;vcc-vc-unit&#x27;).value, dU = $(&#x27;vcc-d-unit&#x27;).value;&#10;      var vM = vU === &#x27;ft&#x27; ? vals.vc \/ FT_PER_M : vals.vc;&#10;      var dM = dU === &#x27;in&#x27; ? vals.d * MM_PER_IN : vals.d;&#10;      var n = rpmMetric(vM, dM);&#10;      r = { label: &#x27;Calculated Spindle Speed&#x27;, value: fixed(Math.round(n), 0), unit: &#x27;RPM&#x27;,&#10;            sLabel: &#x27;Unrounded value&#x27;, sValue: fixed(n, 2) + &#x27; RPM&#x27;, raw: [n] };&#10;      if (vU === &#x27;ft&#x27; &amp;&amp; dU === &#x27;in&#x27;) {&#10;        used = [&#x27;n = (12 \u00d7 Vc) \/ (\u03c0 \u00d7 D)&#x27;,&#10;                &#x27;= (12 \u00d7 &#x27; + plain(vals.vc) + &#x27; ft\/min) \/ (\u03c0 \u00d7 &#x27; + plain(vals.d) + &#x27; in) = &#x27; + fixed(n, 2) + &#x27; RPM&#x27;];&#10;      } else {&#10;        used = [&#x27;n = (1000 \u00d7 Vc) \/ (\u03c0 \u00d7 D)&#x27;,&#10;                &#x27;= (1000 \u00d7 &#x27; + plain(vM) + &#x27; m\/min) \/ (\u03c0 \u00d7 &#x27; + plain(dM) + &#x27; mm) = &#x27; + fixed(n, 2) + &#x27; RPM&#x27;];&#10;        if (vU !== &#x27;m&#x27; || dU !== &#x27;mm&#x27;) used.push(&#x27;Mixed units converted to metric: &#x27; +&#10;          (vU === &#x27;ft&#x27; ? plain(vals.vc) + &#x27; ft\/min = &#x27; + plain(vM) + &#x27; m\/min&#x27; : &#x27;&#x27;) +&#10;          (vU === &#x27;ft&#x27; &amp;&amp; dU === &#x27;in&#x27; ? &#x27;; &#x27; : &#x27;&#x27;) +&#10;          (dU === &#x27;in&#x27; ? plain(vals.d) + &#x27; in = &#x27; + plain(dM) + &#x27; mm&#x27; : &#x27;&#x27;));&#10;      }&#10;      note = &#x27;Theoretical value. Check it against your machine\\&#x27;s maximum spindle speed before use.&#x27;;&#10;    } else {&#10;      var vU2 = $(&#x27;vcc-vc-unit&#x27;).value, outU = $(&#x27;vcc-dout-unit&#x27;).value;&#10;      var vM2 = vU2 === &#x27;ft&#x27; ? vals.vc \/ FT_PER_M : vals.vc;&#10;      var dMm2 = diaMetric(vM2, vals.n), dIn = dMm2 \/ MM_PER_IN;&#10;      if (outU === &#x27;in&#x27;) {&#10;        r = { label: &#x27;Required Diameter&#x27;, value: fixed(dIn, 2), unit: &#x27;inches&#x27;,&#10;              sLabel: &#x27;Equivalent Diameter&#x27;, sValue: fixed(dMm2, 2) + &#x27; mm&#x27;, raw: [dIn, dMm2] };&#10;      } else {&#10;        r = { label: &#x27;Required Diameter&#x27;, value: fixed(dMm2, 2), unit: &#x27;mm&#x27;,&#10;              sLabel: &#x27;Equivalent Diameter&#x27;, sValue: fixed(dIn, 2) + &#x27; inches&#x27;, raw: [dMm2, dIn] };&#10;      }&#10;      if (vU2 === &#x27;ft&#x27; &amp;&amp; outU === &#x27;in&#x27;) {&#10;        used = [&#x27;D = (12 \u00d7 Vc) \/ (\u03c0 \u00d7 n)&#x27;,&#10;                &#x27;= (12 \u00d7 &#x27; + plain(vals.vc) + &#x27; ft\/min) \/ (\u03c0 \u00d7 &#x27; + plain(vals.n) + &#x27; RPM) = &#x27; + fixed(dIn, 2) + &#x27; in&#x27;];&#10;      } else {&#10;        used = [&#x27;D = (1000 \u00d7 Vc) \/ (\u03c0 \u00d7 n)&#x27;,&#10;                &#x27;= (1000 \u00d7 &#x27; + plain(vM2) + &#x27; m\/min) \/ (\u03c0 \u00d7 &#x27; + plain(vals.n) + &#x27; RPM) = &#x27; + fixed(dMm2, 2) + &#x27; mm&#x27;];&#10;        if (vU2 === &#x27;ft&#x27;) used.push(&#x27;Converted: &#x27; + plain(vals.vc) + &#x27; ft\/min = &#x27; + plain(vM2) + &#x27; m\/min&#x27;);&#10;      }&#10;      note = &#x27;This is the diameter at which the given spindle speed produces the target cutting speed.&#x27;;&#10;    }&#10;&#10;    \/\/ Never display NaN \/ Infinity&#10;    for (var i = 0; i &lt; r.raw.length; i++) {&#10;      if (!isFinite(r.raw[i])) { hideResult(); return false; }&#10;    }&#10;    renderResult(r, used, note);&#10;    return true;&#10;  }&#10;&#10;  \/* ---------- rendering ---------- *\/&#10;  function renderResult(r, used, note) {&#10;    $(&#x27;vcc-p-label&#x27;).textContent = r.label;&#10;    $(&#x27;vcc-p-value&#x27;).textContent = r.value;&#10;    $(&#x27;vcc-p-unit&#x27;).textContent = r.unit;&#10;    $(&#x27;vcc-s-label&#x27;).textContent = r.sLabel;&#10;    $(&#x27;vcc-s-value&#x27;).textContent = r.sValue;&#10;    var box = $(&#x27;vcc-used&#x27;);&#10;    box.innerHTML = &#x27;&#x27;;&#10;    used.forEach(function (line) { var d = document.createElement(&#x27;div&#x27;); d.textContent = line; box.appendChild(d); });&#10;    $(&#x27;vcc-note&#x27;).textContent = note;&#10;    $(&#x27;vcc-results&#x27;).hidden = false;&#10;  }&#10;  function hideResult() {&#10;    $(&#x27;vcc-results&#x27;).hidden = true;&#10;  }&#10;&#10;  function setMode(m) {&#10;    mode = m;&#10;    var need = MODES[m].fields;&#10;    $(&#x27;vcc-wrap-vc&#x27;).hidden = need.indexOf(&#x27;vc&#x27;) &lt; 0;&#10;    $(&#x27;vcc-wrap-n&#x27;).hidden = need.indexOf(&#x27;n&#x27;) &lt; 0;&#10;    $(&#x27;vcc-wrap-d&#x27;).hidden = need.indexOf(&#x27;d&#x27;) &lt; 0;&#10;    $(&#x27;vcc-wrap-dout&#x27;).hidden = m !== &#x27;dia&#x27;;&#10;    clearAllErrors();&#10;    shown = false;&#10;    hideResult();&#10;  }&#10;&#10;  function reset() {&#10;    $(&#x27;vcc-vc&#x27;).value = DEFAULTS.vc; $(&#x27;vcc-vc-unit&#x27;).value = DEFAULTS.vcUnit;&#10;    $(&#x27;vcc-n&#x27;).value = DEFAULTS.n;&#10;    $(&#x27;vcc-d&#x27;).value = DEFAULTS.d; $(&#x27;vcc-d-unit&#x27;).value = DEFAULTS.dUnit;&#10;    $(&#x27;vcc-dout-unit&#x27;).value = DEFAULTS.doutUnit;&#10;    Array.prototype.forEach.call(root.querySelectorAll(&#x27;input[name=&quot;vcc-mode&quot;]&#x27;), function (r) { r.checked = r.value === DEFAULTS.mode; });&#10;    setMode(DEFAULTS.mode);&#10;  }&#10;&#10;  \/* ---------- events ---------- *\/&#10;  $(&#x27;vcc-form&#x27;).addEventListener(&#x27;submit&#x27;, function (e) {&#10;    e.preventDefault();&#10;    shown = true;&#10;    calculate();&#10;  });&#10;&#10;  root.addEventListener(&#x27;change&#x27;, function (e) {&#10;    var t = e.target;&#10;    if (t.name === &#x27;vcc-mode&#x27;) { setMode(t.value); return; }&#10;  });&#10;&#10;  root.addEventListener(&#x27;input&#x27;, function (e) {&#10;    var t = e.target;&#10;    if (!t.classList || !t.classList.contains(&#x27;vcc-input&#x27;)) return;&#10;    var key = t.id.replace(&#x27;vcc-&#x27;, &#x27;&#x27;);&#10;    \/\/ Clear a field&#x27;s error as soon as the user corrects it&#10;    if (t.classList.contains(&#x27;vcc-invalid&#x27;)) {&#10;      var p = parseNum(t.value);&#10;      if (p.ok &amp;&amp; p.n &gt; 0) setErr(key, null);&#10;    }&#10;  });&#10;&#10;  reset();&#10;})();&#10;&lt;\/script&gt;&#10;&lt;script&gt;&#10;\/* Auto-fit the iframe height when embedded via srcdoc (no effect when opened directly). *\/&#10;(function () {&#10;  var f = null;&#10;  try { f = window.frameElement; } catch (e) { f = null; }&#10;  if (!f) return;&#10;  var root = document.getElementById(&#x27;vcc-app&#x27;);&#10;  function fit() {&#10;    var h = Math.ceil((root || document.body).getBoundingClientRect().height);&#10;    if (h &gt; 0) f.style.setProperty(&#x27;height&#x27;, h + &#x27;px&#x27;, &#x27;important&#x27;);&#10;  }&#10;  fit();&#10;  if (window.ResizeObserver) new ResizeObserver(fit).observe(root || document.body);&#10;  window.addEventListener(&#x27;load&#x27;, fit);&#10;  window.addEventListener(&#x27;resize&#x27;, fit);&#10;  setTimeout(fit, 300);&#10;})();&#10;&lt;\/script&gt;&#10;&lt;\/body&gt;&#10;&lt;\/html&gt;&#10;\"><\/iframe>\n","protected":false},"excerpt":{"rendered":"<p>The Cutting Speed (Vc) Calculator helps CNC operators, machinists, and manufacturing engineers quickly calculate cutting speed, spindle speed, and cutting diameter for machining applications. Using&#8230;<\/p>","protected":false},"author":2,"featured_media":25006,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"pmpro_default_level":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[8808],"tags":[3800,8810,8470,2387,8809],"class_list":["post-25009","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-manufacturing-and-processes","tag-cnc-machining","tag-cutting-parameters","tag-cutting-speed","tag-machining-tools","tag-spindle-speed","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/10\/Spindle-Speed-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts\/25009","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/comments?post=25009"}],"version-history":[{"count":1,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts\/25009\/revisions"}],"predecessor-version":[{"id":25010,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/posts\/25009\/revisions\/25010"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/media\/25006"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/media?parent=25009"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/categories?post=25009"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/fr\/wp-json\/wp\/v2\/tags?post=25009"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}