{"id":24871,"date":"2026-09-09T02:55:13","date_gmt":"2026-09-09T02:55:13","guid":{"rendered":"https:\/\/www.mechstream.com\/?p=24871"},"modified":"2026-09-09T02:55:19","modified_gmt":"2026-09-09T02:55:19","slug":"linear-thermal-expansion-coefficient-converter-calculator","status":"publish","type":"post","link":"https:\/\/www.mechstream.com\/ru\/linear-thermal-expansion-coefficient-converter-calculator\/","title":{"rendered":"Linear Thermal Expansion Coefficient Converter Calculator"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The <strong>Linear Thermal Expansion Coefficient Converter Calculator<\/strong> is a practical engineering tool designed to convert coefficients of linear thermal expansion between common metric and imperial units. It supports units such as 1\/\u00b0C, 1\/K, 1\/\u00b0F, \u00b5m\/m\u00b7\u00b0C, and \u00b5m\/m\u00b7\u00b0F while providing accurate scientific notation conversions. The Linear Thermal Expansion Coefficient Converter Calculator is useful for material selection, thermal engineering, mechanical design, piping, bearings, machine components, and precision assemblies affected by temperature changes.<\/p>\n\n\n\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <meta name=\"description\" content=\"Linear Thermal Expansion Coefficient Converter Calculator for engineers. Convert CTE units, compare materials, calculate thermal strain and dimensional change.\">\n  <title>Linear Thermal Expansion Coefficient Converter Calculator<\/title>\n  <style>\n    \/* All calculator styles are scoped under #lec-root so embedding in WordPress\n       does not change styles of other page elements. *\/\n    #lec-root {\n      --ink: #17212b;\n      --muted: #65727d;\n      --line: #dfe5e8;\n      --panel: #ffffff;\n      --canvas: #f4f6f7;\n      --navy: #163342;\n      --navy-2: #234b5b;\n      --teal: #0f8b8d;\n      --teal-dark: #096d70;\n      --orange: #ee8b36;\n      --orange-soft: #fff0df;\n      --green: #2f966f;\n      --red: #bd4e54;\n      --shadow: 0 14px 40px rgba(20, 42, 53, 0.09);\n      --radius: 10px;\n      color: var(--ink);\n      background: var(--canvas);\n      font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", sans-serif;\n      line-height: 1.5;\n      text-align: left;\n      -webkit-text-size-adjust: 100%;\n    }\n    #lec-root *, #lec-root *::before, #lec-root *::after { box-sizing: border-box; }\n    #lec-root button, #lec-root input, #lec-root select { font: inherit; }\n    #lec-root button { cursor: pointer; }\n    #lec-root .topbar {\n      background: var(--navy);\n      color: #fff;\n      border-bottom: 4px solid var(--orange);\n    }\n    #lec-root .topbar-inner, #lec-root .page {\n      width: min(1240px, calc(100% - 40px));\n      margin: 0 auto;\n    }\n    #lec-root .topbar-inner {\n      min-height: 78px;\n      display: flex;\n      align-items: center;\n      justify-content: space-between;\n      gap: 24px;\n    }\n    #lec-root .brand {\n      display: flex;\n      align-items: center;\n      gap: 12px;\n    }\n    #lec-root .brand-mark {\n      display: grid;\n      place-items: center;\n      width: 38px;\n      height: 38px;\n      border: 1px solid rgba(255,255,255,0.35);\n      border-radius: 8px;\n      color: #ffe0ad;\n      font-weight: 800;\n      letter-spacing: 0;\n    }\n    #lec-root .brand small {\n      display: block;\n      color: #b7c7ce;\n      font-size: 0.72rem;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n    }\n    #lec-root .brand strong {\n      display: block;\n      font-size: 1rem;\n      letter-spacing: 0;\n    }\n    #lec-root .status {\n      display: inline-flex;\n      align-items: center;\n      gap: 8px;\n      color: #d1e1e4;\n      font-size: 0.83rem;\n    }\n    #lec-root .status-dot {\n      width: 8px;\n      height: 8px;\n      border-radius: 50%;\n      background: #58c69a;\n      box-shadow: 0 0 0 4px rgba(88,198,154,0.13);\n    }\n    #lec-root .page { padding: 24px 0 40px; }\n    #lec-root .intro {\n      display: grid;\n      grid-template-columns: minmax(0, 1fr) auto;\n      align-items: end;\n      gap: 30px;\n      margin-bottom: 22px;\n    }\n    #lec-root .eyebrow {\n      margin: 0 0 8px;\n      color: var(--teal-dark);\n      font-size: 0.75rem;\n      font-weight: 800;\n      letter-spacing: 0.12em;\n      text-transform: uppercase;\n    }\n    #lec-root h1, #lec-root h2, #lec-root h3, #lec-root p { margin-top: 0; }\n    #lec-root h1 {\n      max-width: 810px;\n      margin-bottom: 10px;\n      color: var(--navy);\n      font-size: clamp(1.9rem, 4vw, 3.35rem);\n      line-height: 1.06;\n      letter-spacing: -0.025em;\n    }\n    #lec-root .intro-copy {\n      max-width: 820px;\n      margin-bottom: 0;\n      color: var(--muted);\n      font-size: 0.98rem;\n    }\n    #lec-root .intro-badge {\n      padding: 12px 16px;\n      border: 1px solid #d5e3e4;\n      border-radius: 8px;\n      background: #eaf5f4;\n      color: var(--teal-dark);\n      font-size: 0.84rem;\n      font-weight: 700;\n      white-space: nowrap;\n    }\n    #lec-root .workspace {\n      overflow: hidden;\n      border: 1px solid var(--line);\n      border-radius: var(--radius);\n      background: var(--panel);\n      box-shadow: var(--shadow);\n    }\n    #lec-root .mode-panel { padding: 26px; }\n    #lec-root .calculator-grid {\n      display: block;\n    }\n    #lec-root .control-panel {\n      padding: 0;\n    }\n    #lec-root .panel-heading {\n      display: flex;\n      justify-content: space-between;\n      align-items: start;\n      gap: 14px;\n      margin-bottom: 20px;\n    }\n    #lec-root .panel-heading h2, #lec-root .section-heading h2 {\n      margin-bottom: 4px;\n      color: var(--navy);\n      font-size: 1.15rem;\n      letter-spacing: -0.01em;\n    }\n    #lec-root .panel-heading p, #lec-root .section-heading p {\n      margin-bottom: 0;\n      color: var(--muted);\n      font-size: 0.84rem;\n    }\n    #lec-root .form-grid {\n      display: grid;\n      grid-template-columns: repeat(2, minmax(0, 1fr));\n      gap: 15px;\n    }\n    #lec-root .field { min-width: 0; }\n    #lec-root .field.full { grid-column: 1 \/ -1; }\n    #lec-root label {\n      display: flex;\n      justify-content: space-between;\n      gap: 8px;\n      margin-bottom: 7px;\n      color: #40515b;\n      font-size: 0.78rem;\n      font-weight: 800;\n      letter-spacing: 0.03em;\n      text-transform: uppercase;\n    }\n    #lec-root .label-note {\n      color: #9aa7ad;\n      font-size: 0.72rem;\n      font-weight: 500;\n      letter-spacing: 0;\n      text-transform: none;\n    }\n    #lec-root input, #lec-root select {\n      width: 100%;\n      min-height: 44px;\n      border: 1px solid #ccd6da;\n      border-radius: 7px;\n      outline: none;\n      padding: 10px 12px;\n      background: #fff;\n      color: var(--ink);\n      transition: border-color 0.16s, box-shadow 0.16s;\n    }\n    #lec-root input:focus, #lec-root select:focus {\n      border-color: var(--teal);\n      box-shadow: 0 0 0 3px rgba(15,139,141,0.12);\n    }\n    #lec-root input[type=\"number\"] { font-variant-numeric: tabular-nums; }\n    #lec-root .input-unit {\n      display: grid;\n      grid-template-columns: minmax(0, 1fr) minmax(140px, 0.82fr);\n      gap: 8px;\n    }\n    #lec-root .material-inline {\n      display: grid;\n      grid-template-columns: minmax(0, 1fr) 140px;\n      gap: 8px;\n    }\n    #lec-root .form-actions {\n      display: flex;\n      flex-wrap: wrap;\n      gap: 9px;\n      margin-top: 20px;\n    }\n    #lec-root .calculate-action {\n      justify-content: center;\n    }\n    #lec-root .button {\n      min-height: 42px;\n      border: 1px solid transparent;\n      border-radius: 7px;\n      padding: 9px 14px;\n      font-size: 0.86rem;\n      font-weight: 800;\n      transition: transform 0.16s, background 0.16s, border-color 0.16s;\n    }\n    #lec-root .button:hover { transform: translateY(-1px); }\n    #lec-root .button.primary { background: var(--teal); color: #fff; }\n    #lec-root .button.primary:hover { background: var(--teal-dark); }\n    #lec-root #calculateButton {\n      width: min(280px, 100%);\n      background: #2563eb;\n    }\n    #lec-root #calculateButton:hover {\n      background: #1d4ed8;\n    }\n    #lec-root .button.secondary { border-color: #b8c9cc; background: #fff; color: var(--navy); }\n    #lec-root .button.secondary:hover { background: #eef6f5; }\n    #lec-root .button.quiet { border-color: var(--line); background: #f7f9f9; color: var(--muted); }\n    #lec-root .button.icon-button {\n      display: inline-flex;\n      align-items: center;\n      justify-content: center;\n      gap: 7px;\n    }\n    #lec-root .button:disabled { cursor: not-allowed; opacity: 0.48; transform: none; }\n    #lec-root .result-panel { min-width: 0; }\n    #lec-root .calculator-grid > .result-panel {\n      margin-top: 26px;\n      padding-top: 26px;\n      border-top: 1px solid var(--line);\n    }\n    #lec-root .result-hero {\n      display: grid;\n      grid-template-columns: minmax(0, 1fr) auto;\n      align-items: center;\n      gap: 18px;\n      padding: 20px;\n      border-radius: 8px;\n      background: var(--navy);\n      color: #fff;\n    }\n    #lec-root .result-kicker {\n      margin-bottom: 6px;\n      color: #a9c5c9;\n      font-size: 0.75rem;\n      font-weight: 800;\n      letter-spacing: 0.11em;\n      text-transform: uppercase;\n    }\n    #lec-root .result-value {\n      margin-bottom: 2px;\n      font-size: clamp(1.7rem, 4vw, 2.6rem);\n      font-weight: 850;\n      line-height: 1.1;\n      letter-spacing: -0.025em;\n      overflow-wrap: anywhere;\n    }\n    #lec-root .result-unit { color: #d3e1e4; font-size: 0.9rem; }\n    #lec-root .result-symbol {\n      display: grid;\n      place-items: center;\n      width: 70px;\n      height: 70px;\n      border: 1px solid rgba(255,255,255,0.21);\n      border-radius: 50%;\n      color: #ffd79c;\n      font-size: 1.55rem;\n      font-weight: 800;\n    }\n    #lec-root .result-summary {\n      display: grid;\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n      gap: 9px;\n      margin: 14px 0 20px;\n    }\n    #lec-root .mini-stat {\n      min-width: 0;\n      padding: 12px;\n      border: 1px solid var(--line);\n      border-radius: 7px;\n      background: #fbfcfc;\n    }\n    #lec-root .mini-stat span {\n      display: block;\n      margin-bottom: 4px;\n      color: var(--muted);\n      font-size: 0.7rem;\n      font-weight: 800;\n      letter-spacing: 0.05em;\n      text-transform: uppercase;\n    }\n    #lec-root .mini-stat strong {\n      display: block;\n      color: var(--navy);\n      font-size: 0.92rem;\n      overflow-wrap: anywhere;\n    }\n    #lec-root .table-wrap { overflow-x: auto; }\n    #lec-root table {\n      width: 100%;\n      border-collapse: collapse;\n      font-size: 0.84rem;\n    }\n    #lec-root th, #lec-root td {\n      padding: 10px 9px;\n      border-bottom: 1px solid #edf0f1;\n      text-align: left;\n      vertical-align: middle;\n    }\n    #lec-root th {\n      color: var(--muted);\n      font-size: 0.71rem;\n      font-weight: 850;\n      letter-spacing: 0.07em;\n      text-transform: uppercase;\n      white-space: nowrap;\n    }\n    #lec-root td:last-child, #lec-root th:last-child { text-align: right; }\n    #lec-root td.value-cell {\n      color: var(--navy);\n      font-weight: 750;\n      font-variant-numeric: tabular-nums;\n      white-space: nowrap;\n    }\n    #lec-root .viz-block {\n      margin-top: 22px;\n      padding: 17px;\n      border: 1px solid #d7e4e5;\n      border-radius: 8px;\n      background: #eff7f6;\n    }\n    #lec-root .viz-head {\n      display: flex;\n      align-items: baseline;\n      justify-content: space-between;\n      gap: 12px;\n      margin-bottom: 15px;\n    }\n    #lec-root .viz-head strong { color: var(--navy); font-size: 0.91rem; }\n    #lec-root .viz-head span { color: var(--teal-dark); font-size: 0.78rem; font-weight: 800; }\n    #lec-root .beam-stage { position: relative; height: 72px; padding: 19px 2px 0; }\n    #lec-root .beam-line {\n      position: absolute;\n      top: 34px;\n      left: 5%;\n      width: 90%;\n      height: 3px;\n      background: #a9c7c9;\n    }\n    #lec-root .beam {\n      position: absolute;\n      top: 24px;\n      left: 7%;\n      width: 58%;\n      height: 20px;\n      border-radius: 3px;\n      background: var(--navy-2);\n      transition: width 0.25s ease, background 0.25s ease;\n    }\n    #lec-root .beam.expanded { top: 28px; height: 13px; background: var(--orange); opacity: 0.88; }\n    #lec-root .beam-label {\n      position: absolute;\n      top: 0;\n      color: var(--muted);\n      font-size: 0.7rem;\n      font-weight: 750;\n    }\n    #lec-root .beam-label.start { left: 7%; }\n    #lec-root .beam-label.end { right: 4%; }\n    #lec-root .viz-foot {\n      display: grid;\n      grid-template-columns: 1fr auto 1fr;\n      align-items: center;\n      gap: 10px;\n      color: var(--muted);\n      font-size: 0.75rem;\n    }\n    #lec-root .viz-foot span:nth-child(2) { color: var(--orange); font-weight: 850; text-align: center; }\n    #lec-root .viz-foot span:last-child { text-align: right; }\n    #lec-root .range-text { color: var(--muted); font-size: 0.78rem; }\n    #lec-root .calculation-result {\n      display: grid;\n      grid-template-columns: repeat(3, minmax(0, 1fr));\n      gap: 12px;\n      margin-top: 22px;\n    }\n    #lec-root .result-card {\n      padding: 16px;\n      border: 1px solid var(--line);\n      border-radius: 8px;\n      background: #fbfcfc;\n    }\n    #lec-root .result-card .card-label {\n      margin-bottom: 8px;\n      color: var(--muted);\n      font-size: 0.72rem;\n      font-weight: 850;\n      letter-spacing: 0.06em;\n      text-transform: uppercase;\n    }\n    #lec-root .result-card .card-value {\n      color: var(--navy);\n      font-size: 1.42rem;\n      font-weight: 850;\n      line-height: 1.15;\n      overflow-wrap: anywhere;\n    }\n    #lec-root .result-card .card-unit { color: var(--muted); font-size: 0.79rem; }\n    #lec-root .hidden { display: none !important; }\n    #lec-root .error {\n      margin-top: 10px;\n      color: var(--red);\n      font-size: 0.8rem;\n      font-weight: 700;\n    }\n    #lec-root .positive { color: var(--green) !important; }\n    #lec-root .negative { color: var(--red) !important; }\n    #lec-root .toast {\n      position: fixed;\n      z-index: 20;\n      right: 20px;\n      bottom: 20px;\n      max-width: min(330px, calc(100% - 40px));\n      transform: translateY(20px);\n      visibility: hidden;\n      padding: 11px 14px;\n      border-radius: 7px;\n      background: var(--navy);\n      color: #fff;\n      box-shadow: var(--shadow);\n      opacity: 0;\n      font-size: 0.84rem;\n      transition: opacity 0.2s, transform 0.2s, visibility 0.2s;\n    }\n    #lec-root .toast.show { visibility: visible; transform: translateY(0); opacity: 1; }\n    @media (max-width: 920px) {\n\n      #lec-root .control-panel { padding-right: 0; }\n    \n  }\n    @media (max-width: 680px) {\n\n      #lec-root .topbar-inner, #lec-root .page { width: min(100% - 24px, 1240px); }\n      #lec-root .topbar-inner { min-height: 70px; }\n      #lec-root .status { display: none; }\n      #lec-root .page { padding-top: 22px; }\n      #lec-root .mode-panel { padding: 18px 14px; }\n      #lec-root .form-grid, #lec-root .result-summary, #lec-root .calculation-result, #lec-root .metric-strip { grid-template-columns: 1fr; }\n      #lec-root .field.full { grid-column: auto; }\n      #lec-root .input-unit, #lec-root .material-inline { grid-template-columns: 1fr; }\n      #lec-root .result-hero { grid-template-columns: 1fr auto; padding: 16px; }\n      #lec-root .result-symbol { width: 56px; height: 56px; font-size: 1.2rem; }\n      #lec-root .viz-foot { grid-template-columns: 1fr; gap: 2px; }\n      #lec-root .viz-foot span:last-child { text-align: left; }\n    \n  }\n  <\/style>\n<\/head>\n<body>\n  <div id=\"lec-root\">\n    <main class=\"page\">\n    <section class=\"workspace\" aria-label=\"Thermal expansion calculator\">\n      <section class=\"mode-panel active\" id=\"mode-convert\">\n        <div class=\"calculator-grid\">\n          <div class=\"control-panel\">\n            <div class=\"panel-heading\">\n              <div>\n                <h2>Coefficient conversion<\/h2>\n              <\/div>\n            <\/div>\n            <div class=\"form-grid\">\n              <div class=\"field full\">\n                <label for=\"primaryValue\">Coefficient value <span class=\"label-note\">scientific notation supported<\/span><\/label>\n                <div class=\"input-unit\">\n                  <input id=\"primaryValue\" type=\"number\" step=\"any\" value=\"12\" inputmode=\"decimal\">\n                  <select id=\"primaryFrom\" aria-label=\"From unit\"><\/select>\n                <\/div>\n              <\/div>\n              <div class=\"field full\">\n                <label for=\"primaryTo\">Convert to<\/label>\n                <select id=\"primaryTo\"><\/select>\n              <\/div>\n              <div class=\"field full\">\n                <label for=\"primaryMaterial\">Material preset <span class=\"label-note\">optional<\/span><\/label>\n                <div class=\"material-inline\">\n                  <select id=\"primaryMaterial\"><\/select>\n                  <input id=\"primaryMaterialValue\" type=\"number\" step=\"any\" value=\"12\" title=\"Editable preset value in microstrain per degree Celsius\">\n                <\/div>\n              <\/div>\n              <div class=\"field\">\n                <label for=\"precision\">Precision<\/label>\n                <select id=\"precision\">\n                  <option value=\"2\">2 decimals<\/option>\n                  <option value=\"3\">3 decimals<\/option>\n                  <option value=\"4\" selected>4 decimals<\/option>\n                  <option value=\"6\">6 decimals<\/option>\n                <\/select>\n              <\/div>\n              <div class=\"field\">\n                <label for=\"formatStyle\">Number format<\/label>\n                <select id=\"formatStyle\">\n                  <option value=\"decimal\" selected>Decimal<\/option>\n                  <option value=\"scientific\">Scientific<\/option>\n                  <option value=\"engineering\">Engineering<\/option>\n                <\/select>\n              <\/div>\n            <\/div>\n            <div class=\"form-actions calculate-action\">\n              <button class=\"button primary\" id=\"calculateButton\" type=\"button\">Calculate<\/button>\n            <\/div>\n            <div class=\"error hidden\" id=\"primaryError\"><\/div>\n          <\/div>\n\n          <div class=\"result-panel hidden\" id=\"resultPanel\">\n            <div class=\"result-hero\">\n              <div>\n                <div class=\"result-kicker\">Converted coefficient<\/div>\n                <div class=\"result-value\" id=\"convertedValue\">6.6667<\/div>\n                <div class=\"result-unit\" id=\"convertedUnit\">&micro;m\/m&middot;&deg;F<\/div>\n              <\/div>\n              <div class=\"result-symbol\">&alpha;<\/div>\n            <\/div>\n            <div class=\"result-summary\">\n              <div class=\"mini-stat\"><span>Decimal form<\/span><strong id=\"decimalSummary\">0.000012 \/&deg;C<\/strong><\/div>\n              <div class=\"mini-stat\"><span>Micro-unit &deg;C<\/span><strong id=\"microSummary\">12 &micro;m\/m&middot;&deg;C<\/strong><\/div>\n              <div class=\"mini-stat\"><span>Engineering<\/span><strong id=\"engineeringSummary\">12 &times; 10<sup>-6<\/sup> \/&deg;C<\/strong><\/div>\n            <\/div>\n            <div class=\"table-wrap\">\n              <table aria-label=\"All unit conversion results\">\n                <thead><tr><th>Equivalent unit<\/th><th>Value<\/th><\/tr><\/thead>\n                <tbody id=\"allUnitRows\"><\/tbody>\n              <\/table>\n            <\/div>\n            <div class=\"viz-block\">\n              <div class=\"viz-head\"><strong>Expansion direction<\/strong><span id=\"vizTemperature\">+50 &deg;C<\/span><\/div>\n              <div class=\"beam-stage\">\n                <span class=\"beam-label start\">Original<\/span>\n                <span class=\"beam-label end\">Direction of change<\/span>\n                <div class=\"beam-line\"><\/div>\n                <div class=\"beam\"><\/div>\n                <div class=\"beam expanded\" id=\"vizExpandedBeam\"><\/div>\n              <\/div>\n              <div class=\"viz-foot\"><span id=\"vizOriginal\">L<sub>0<\/sub> = 1.000 m<\/span><span id=\"vizDelta\">&Delta;L = +0.000600 m<\/span><span id=\"vizFinal\">L<sub>f<\/sub> = 1.000600 m<\/span><\/div>\n            <\/div>\n          <\/div>\n        <\/div>\n      <\/section>\n    <\/section>\n  <\/main>\n  <div class=\"toast\" id=\"toast\" role=\"status\" aria-live=\"polite\"><\/div>\n  <\/div>\n\n  <script>\n    const units = {\n      perC: { label: '1\/&deg;C', factor: 1 },\n      perK: { label: '1\/K', factor: 1 },\n      perF: { label: '1\/&deg;F', factor: 1.8 },\n      microC: { label: '&micro;m\/m&middot;&deg;C', factor: 1e-6 },\n      microK: { label: '&micro;m\/m&middot;K', factor: 1e-6 },\n      microF: { label: '&micro;m\/m&middot;&deg;F', factor: 1.8e-6 },\n      milliC: { label: 'mm\/m&middot;&deg;C', factor: 1e-3 },\n      milliK: { label: 'mm\/m&middot;K', factor: 1e-3 },\n      milliF: { label: 'mm\/m&middot;&deg;F', factor: 1.8e-3 },\n      inchC: { label: 'in\/in&middot;&deg;C', factor: 1 },\n      inchK: { label: 'in\/in&middot;K', factor: 1 },\n      inchF: { label: 'in\/in&middot;&deg;F', factor: 1.8 },\n      ppmC: { label: '10<sup>-6<\/sup>\/&deg;C', factor: 1e-6 },\n      ppmK: { label: '10<sup>-6<\/sup>\/K', factor: 1e-6 },\n      ppmF: { label: '10<sup>-6<\/sup>\/&deg;F', factor: 1.8e-6 }\n    };\n    const unitOrder = ['perC', 'perK', 'perF', 'microC', 'microK', 'microF', 'milliC', 'milliK', 'milliF', 'inchC', 'inchK', 'inchF', 'ppmC', 'ppmK', 'ppmF'];\n    const lengthUnits = {\n      m: { label: 'm', factor: 1 },\n      mm: { label: 'mm', factor: 1e-3 },\n      cm: { label: 'cm', factor: 1e-2 },\n      inch: { label: 'in', factor: 0.0254 },\n      ft: { label: 'ft', factor: 0.3048 }\n    };\n    const materials = [\n      { id: 'carbon-steel', name: 'Carbon steel', range: '11-13', value: 12 },\n      { id: 'stainless-steel', name: 'Stainless steel', range: '15-18', value: 16.5 },\n      { id: 'cast-iron', name: 'Cast iron', range: '10-12', value: 11 },\n      { id: 'aluminum-alloy', name: 'Aluminum alloy', range: '22-24', value: 23 },\n      { id: 'copper', name: 'Copper', range: '16-17', value: 16.7 },\n      { id: 'brass', name: 'Brass', range: '18-20', value: 19 },\n      { id: 'titanium-alloy', name: 'Titanium alloy', range: '8-10', value: 8.6 },\n      { id: 'invar', name: 'Invar', range: '1-2', value: 1.2 },\n      { id: 'glass', name: 'Glass', range: '3-9', value: 8.5 },\n      { id: 'concrete', name: 'Concrete', range: '8-12', value: 10 }\n    ];\n    const materialMap = Object.fromEntries(materials.map(item => [item.id, item]));\n    const $ = id => document.getElementById(id);\n    const unitLabel = key => units[key].label.replace(\/<[^>]+>\/g, '').replace('&micro;', '\u00b5').replace('&deg;', '\u00b0').replace('&middot;', '\u00b7');\n    const escapeHtml = value => String(value).replace(\/[&<>\"']\/g, char => ({ '&': '&amp;', '<': '&lt;', '>': '&gt;', '\"': '&quot;', \"'\": '&#039;' }[char]));\n\n    function fillUnitSelect(select, selected) {\n      select.innerHTML = unitOrder.map(key => '<option value=\"' + key + '\"' + (key === selected ? ' selected' : '') + '>' + units[key].label + '<\/option>').join('');\n    }\n    function fillLengthSelect(select, selected) {\n      select.innerHTML = Object.entries(lengthUnits).map(([key, data]) => '<option value=\"' + key + '\"' + (key === selected ? ' selected' : '') + '>' + data.label + '<\/option>').join('');\n    }\n    function fillMaterialSelect(select, selected) {\n      select.innerHTML = '<option value=\"custom\">Custom value<\/option>' + materials.map(item => '<option value=\"' + item.id + '\"' + (item.id === selected ? ' selected' : '') + '>' + escapeHtml(item.name) + '<\/option>').join('');\n    }\n    function numberValue(id) {\n      const value = Number.parseFloat($(id).value);\n      return Number.isFinite(value) ? value : null;\n    }\n    function trimZeros(value) {\n      return String(value).replace(\/(\\.\\d*?[1-9])0+$\/, '$1').replace(\/\\.0+$\/, '');\n    }\n    function fixed(value, precision) {\n      if (!Number.isFinite(value)) return '\u2014';\n      if (value === 0) return '0';\n      const abs = Math.abs(value);\n      const exponent = Math.floor(Math.log10(abs));\n      const decimals = Math.min(14, Math.max(precision, exponent < 0 ? -exponent + precision - 1 : precision));\n      return trimZeros(value.toFixed(decimals));\n    }\n    function scientific(value, precision) {\n      if (!Number.isFinite(value)) return '\u2014';\n      if (value === 0) return '0';\n      return value.toExponential(precision).replace('e+', 'e');\n    }\n    function engineering(value, precision) {\n      if (!Number.isFinite(value)) return '\u2014';\n      if (value === 0) return '0';\n      const exponent = Math.floor(Math.log10(Math.abs(value)) \/ 3) * 3;\n      const mantissa = value \/ Math.pow(10, exponent);\n      return trimZeros(mantissa.toFixed(precision)) + ' &times; 10<sup>' + exponent + '<\/sup>';\n    }\n    function formatNumber(value, style, precision) {\n      if (style === 'scientific') return scientific(value, precision);\n      if (style === 'engineering') return engineering(value, precision);\n      return fixed(value, precision);\n    }\n    function signedFixed(value, precision) {\n      if (!Number.isFinite(value)) return '\u2014';\n      return (value >= 0 ? '+' : '') + fixed(value, precision);\n    }\n    function showError(id, message) {\n      const target = $(id);\n      target.textContent = message || '';\n      target.classList.toggle('hidden', !message);\n    }\n    function toast(message) {\n      const target = $('toast');\n      target.textContent = message;\n      target.classList.add('show');\n      window.clearTimeout(toast.timer);\n      toast.timer = window.setTimeout(() => target.classList.remove('show'), 2200);\n    }\n    function materialById(id) {\n      return materialMap[id] || null;\n    }\n\n    function updateConversion() {\n      const value = numberValue('primaryValue');\n      const from = $('primaryFrom').value;\n      const to = $('primaryTo').value;\n      const precision = Number($('precision').value);\n      const style = $('formatStyle').value;\n      if (value === null || !units[from] || !units[to]) {\n        $('resultPanel').classList.add('hidden');\n        showError('primaryError', 'Enter a valid numeric coefficient.');\n        return null;\n      }\n      showError('primaryError', '');\n      $('resultPanel').classList.remove('hidden');\n      const base = value * units[from].factor;\n      const converted = base \/ units[to].factor;\n      $('convertedValue').innerHTML = formatNumber(converted, style, precision);\n      $('convertedUnit').innerHTML = units[to].label;\n      $('decimalSummary').innerHTML = formatNumber(base, 'decimal', precision) + ' \/&deg;C';\n      $('microSummary').innerHTML = formatNumber(base \/ 1e-6, 'decimal', precision) + ' &micro;m\/m&middot;&deg;C';\n      $('engineeringSummary').innerHTML = engineering(base, precision) + ' \/&deg;C';\n      $('allUnitRows').innerHTML = unitOrder.map(key => '<tr><td>' + units[key].label + '<\/td><td class=\"value-cell\">' + formatNumber(base \/ units[key].factor, style, precision) + '<\/td><\/tr>').join('');\n      updatePrimaryVisualization(base);\n      return { value, from, to, base, converted, precision, style };\n    }\n    function updatePrimaryVisualization(base) {\n      const deltaT = 50;\n      const length = 1;\n      const strain = base * deltaT;\n      const deltaL = length * strain;\n      const finalL = length + deltaL;\n      updateVisualization('vizExpandedBeam', 'vizTemperature', 'vizOriginal', 'vizDelta', 'vizFinal', deltaT, length, deltaL, finalL);\n    }\n    function updateVisualization(beamId, temperatureId, originalId, deltaId, finalId, deltaT, length, deltaL, finalL) {\n      const beam = $(beamId);\n      const relative = length === 0 ? 0 : deltaL \/ length;\n      const width = Math.max(45, Math.min(88, 58 + relative * 100000));\n      beam.style.width = width + '%';\n      beam.style.left = '7%';\n      $(temperatureId).innerHTML = signedFixed(deltaT, 2) + ' &deg;C';\n      $(originalId).innerHTML = 'L<sub>0<\/sub> = ' + fixed(length, 6) + ' m';\n      $(deltaId).innerHTML = '&Delta;L = ' + signedFixed(deltaL, 6) + ' m';\n      $(finalId).innerHTML = 'L<sub>f<\/sub> = ' + fixed(finalL, 6) + ' m';\n    }\n\n    function calculateStrain() {\n      const coefficient = numberValue('strainCoefficient');\n      const deltaT = numberValue('strainDeltaT');\n      if (coefficient === null || deltaT === null) {\n        showError('strainError', 'Enter valid coefficient and temperature-change values.');\n        return;\n      }\n      showError('strainError', '');\n      const strain = coefficient * units[$('strainUnit').value].factor * deltaT;\n      $('strainDimensionless').textContent = fixed(strain, 9);\n      $('strainPercent').textContent = signedFixed(strain * 100, 6) + '%';\n      $('strainMicro').textContent = signedFixed(strain * 1e6, 3);\n    }\n\n    function calculateExpansion() {\n      const coefficient = numberValue('expansionCoefficient');\n      const length = numberValue('expansionLength');\n      const initial = numberValue('initialTemperature');\n      const final = numberValue('finalTemperature');\n      const lengthUnit = $('expansionLengthUnit').value;\n      if (coefficient === null || length === null || initial === null || final === null || length <= 0) {\n        showError('expansionError', 'Use valid values; original length must be greater than zero.');\n        return;\n      }\n      showError('expansionError', '');\n      const deltaT = final - initial;\n      const lengthM = length * lengthUnits[lengthUnit].factor;\n      const deltaL = coefficient * units[$('expansionUnit').value].factor * lengthM * deltaT;\n      const finalM = lengthM + deltaL;\n      const unit = lengthUnits[lengthUnit];\n      const deltaDisplay = deltaL \/ unit.factor;\n      const finalDisplay = finalM \/ unit.factor;\n      $('expansionDeltaT').textContent = signedFixed(deltaT, 3);\n      $('expansionDeltaL').textContent = signedFixed(deltaDisplay, 9);\n      $('expansionFinalL').textContent = fixed(finalDisplay, 9);\n      $('expansionDeltaLUnit').textContent = unit.label;\n      $('expansionFinalLUnit').textContent = unit.label;\n      updateVisualization('expansionVizBeam', 'expansionVizTemperature', 'expansionVizOriginal', 'expansionVizDelta', 'expansionVizFinal', deltaT, lengthM, deltaL, finalM);\n    }\n\n    function calculateReverse() {\n      const length = numberValue('reverseLength');\n      const deltaLength = numberValue('reverseDeltaLength');\n      const initial = numberValue('reverseInitialTemperature');\n      const final = numberValue('reverseFinalTemperature');\n      if (length === null || deltaLength === null || initial === null || final === null || length === 0 || final === initial) {\n        showError('reverseError', 'Original length and temperature change must be non-zero valid values.');\n        return;\n      }\n      showError('reverseError', '');\n      const lengthM = length * lengthUnits[$('reverseLengthUnit').value].factor;\n      const deltaM = deltaLength * lengthUnits[$('reverseDeltaLengthUnit').value].factor;\n      const deltaT = final - initial;\n      const base = deltaM \/ (lengthM * deltaT);\n      const outputUnit = $('reverseOutputUnit').value;\n      $('reverseDeltaT').textContent = signedFixed(deltaT, 3);\n      $('reverseCoefficient').textContent = formatNumber(base \/ units[outputUnit].factor, 'decimal', 6);\n      $('reverseCoefficientUnit').innerHTML = units[outputUnit].label;\n      $('reverseDecimal').textContent = fixed(base, 10);\n    }\n\n    function renderMaterialRows() {\n      const rows = Array.from(document.querySelectorAll('.material-row'));\n      $('addMaterialButton').disabled = rows.length >= 6;\n      document.querySelectorAll('.remove-row').forEach(button => button.disabled = rows.length <= 2);\n    }\n    function addMaterialRow(id = materials[Math.min(document.querySelectorAll('.material-row').length, materials.length - 1)].id) {\n      const row = document.createElement('div');\n      row.className = 'material-row';\n      row.dataset.id = id;\n      const material = materialById(id) || materials[0];\n      row.innerHTML = '<div class=\"field\"><label>Material<\/label><select class=\"compare-material\">' + materials.map(item => '<option value=\"' + item.id + '\"' + (item.id === id ? ' selected' : '') + '>' + escapeHtml(item.name) + '<\/option>').join('') + '<\/select><\/div>' +\n        '<div class=\"field\"><label>Value <span class=\"label-note\">&micro;m\/m&middot;&deg;C<\/span><\/label><input class=\"compare-value\" type=\"number\" step=\"any\" value=\"' + material.value + '\"><\/div>' +\n        '<button class=\"remove-row\" type=\"button\" aria-label=\"Remove material\" title=\"Remove material\">&times;<\/button>';\n      $('materialRows').appendChild(row);\n      row.querySelector('.compare-material').addEventListener('change', event => {\n        const selected = materialById(event.target.value);\n        row.dataset.id = event.target.value;\n        if (selected) row.querySelector('.compare-value').value = selected.value;\n        calculateComparison();\n      });\n      row.querySelector('.compare-value').addEventListener('input', calculateComparison);\n      row.querySelector('.remove-row').addEventListener('click', () => {\n        if (document.querySelectorAll('.material-row').length > 2) {\n          row.remove();\n          renderMaterialRows();\n          calculateComparison();\n        }\n      });\n      renderMaterialRows();\n    }\n    function calculateComparison() {\n      const rows = Array.from(document.querySelectorAll('.material-row'));\n      const deltaT = numberValue('compareDeltaT');\n      const length = numberValue('compareLength');\n      const lengthUnit = $('compareLengthUnit').value;\n      const data = rows.map(row => ({ name: row.querySelector('.compare-material').selectedOptions[0].textContent, value: Number.parseFloat(row.querySelector('.compare-value').value), id: row.dataset.id })).filter(item => Number.isFinite(item.value));\n      if (data.length < 2 || deltaT === null || length === null || length <= 0) {\n        showError('compareError', 'Add at least two materials and valid comparison inputs.');\n        return;\n      }\n      showError('compareError', '');\n      const sorted = [...data].sort((a, b) => a.value - b.value);\n      const lengthM = length * lengthUnits[lengthUnit].factor;\n      $('compareResults').innerHTML = sorted.map((item, index) => {\n        const base = item.value * 1e-6;\n        const deltaL = base * lengthM * deltaT;\n        return '<tr><td><span class=\"rank\">' + (index + 1) + '<\/span><strong>' + escapeHtml(item.name) + '<\/strong><\/td><td class=\"value-cell\">' + fixed(item.value, 4) + '<\/td><td class=\"value-cell\">' + scientific(base, 4) + '<\/td><td class=\"value-cell\">' + fixed(item.value * 5 \/ 9, 4) + '<\/td><td class=\"value-cell ' + (deltaL >= 0 ? 'positive' : 'negative') + '\">' + signedFixed(deltaL \/ lengthUnits[lengthUnit].factor, 6) + ' ' + lengthUnits[lengthUnit].label + '<\/td><\/tr>';\n      }).join('');\n      const first = data[0];\n      const second = data[1];\n      const ratio = second.value === 0 ? NaN : first.value \/ second.value;\n      const difference = second.value === 0 ? NaN : Math.abs(first.value - second.value) \/ Math.abs(second.value) * 100;\n      const relative = (first.value - second.value) * 1e-6 * lengthM * deltaT;\n      $('ratioResult').textContent = Number.isFinite(ratio) ? fixed(ratio, 4) + ' : 1' : '\u2014';\n      $('differenceResult').textContent = Number.isFinite(difference) ? fixed(difference, 2) + '%' : '\u2014';\n      $('relativeExpansionResult').textContent = signedFixed(relative \/ lengthUnits[lengthUnit].factor, 6) + ' ' + lengthUnits[lengthUnit].label;\n      drawComparisonChart(sorted);\n    }\n    function drawComparisonChart(data) {\n      const canvas = $('comparisonChart');\n      const rect = canvas.getBoundingClientRect();\n      const dpr = window.devicePixelRatio || 1;\n      const width = Math.max(320, rect.width);\n      const height = 250;\n      canvas.width = width * dpr;\n      canvas.height = height * dpr;\n      const ctx = canvas.getContext('2d');\n      ctx.scale(dpr, dpr);\n      ctx.clearRect(0, 0, width, height);\n      const padding = { top: 18, right: 15, bottom: 42, left: 40 };\n      const chartW = width - padding.left - padding.right;\n      const chartH = height - padding.top - padding.bottom;\n      const max = Math.max(...data.map(item => item.value), 1);\n      ctx.strokeStyle = '#dfe5e8';\n      ctx.lineWidth = 1;\n      for (let i = 0; i <= 4; i++) {\n        const y = padding.top + chartH - chartH * i \/ 4;\n        ctx.beginPath(); ctx.moveTo(padding.left, y); ctx.lineTo(width - padding.right, y); ctx.stroke();\n        ctx.fillStyle = '#65727d'; ctx.font = '11px system-ui'; ctx.textAlign = 'right';\n        ctx.fillText(fixed(max * i \/ 4, 1), padding.left - 7, y + 4);\n      }\n      const gap = 10;\n      const barW = Math.max(20, (chartW - gap * (data.length - 1)) \/ data.length);\n      data.forEach((item, index) => {\n        const x = padding.left + index * (barW + gap);\n        const barH = chartH * item.value \/ max;\n        const y = padding.top + chartH - barH;\n        ctx.fillStyle = index === 0 ? '#0f8b8d' : '#ee8b36';\n        ctx.fillRect(x, y, barW, barH);\n        ctx.fillStyle = '#17212b'; ctx.font = '700 11px system-ui'; ctx.textAlign = 'center';\n        ctx.fillText(fixed(item.value, 1), x + barW \/ 2, y - 6);\n        ctx.fillStyle = '#65727d'; ctx.font = '11px system-ui';\n        const label = item.name.length > 13 ? item.name.slice(0, 12) + '...' : item.name;\n        ctx.fillText(label, x + barW \/ 2, height - 16);\n      });\n    }\n\n    function init() {\n      fillUnitSelect($('primaryFrom'), 'microC');\n      fillUnitSelect($('primaryTo'), 'microF');\n      fillMaterialSelect($('primaryMaterial'), 'carbon-steel');\n      $('primaryMaterialValue').value = materialMap['carbon-steel'].value;\n      $('primaryMaterial').addEventListener('change', event => {\n        const material = materialById(event.target.value);\n        if (material) {\n          $('primaryMaterialValue').value = material.value;\n          $('primaryValue').value = material.value;\n          $('primaryFrom').value = 'microC';\n        }\n      });\n      $('primaryMaterialValue').addEventListener('input', event => {\n        const value = Number.parseFloat(event.target.value);\n        if (Number.isFinite(value)) {\n          $('primaryValue').value = value;\n          $('primaryFrom').value = 'microC';\n        }\n      });\n      $('calculateButton').addEventListener('click', () => { if (updateConversion()) toast('Calculation complete.'); });\n    }\n    init();\n  <\/script>\n<\/body>\n<\/html>\n","protected":false},"excerpt":{"rendered":"<p>The Linear Thermal Expansion Coefficient Converter Calculator is a practical engineering tool designed to convert coefficients of linear thermal expansion between common metric and imperial&#8230;<\/p>","protected":false},"author":2,"featured_media":24872,"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":[8647],"tags":[8715,8714,8583,8417],"class_list":["post-24871","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-materials-science-and-properties","tag-cte-converter","tag-linear-expansion","tag-thermal-expansion","tag-unit-conversion","pmpro-has-access"],"acf":[],"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/www.mechstream.com\/wp-content\/uploads\/2026\/09\/Linear-Thermal-Expansion-Coefficient-Converter-Calculator.png","_links":{"self":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24871","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/comments?post=24871"}],"version-history":[{"count":1,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24871\/revisions"}],"predecessor-version":[{"id":24873,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/posts\/24871\/revisions\/24873"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/media\/24872"}],"wp:attachment":[{"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/media?parent=24871"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/categories?post=24871"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mechstream.com\/ru\/wp-json\/wp\/v2\/tags?post=24871"}],"curies":[{"name":"WP","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}