{"id":42432,"date":"2025-09-18T12:30:50","date_gmt":"2025-09-18T03:30:50","guid":{"rendered":"https:\/\/first-reach.org\/?page_id=42432"},"modified":"2026-03-26T13:02:51","modified_gmt":"2026-03-26T06:02:51","slug":"modified_atwater_calculator","status":"publish","type":"page","link":"https:\/\/first-reach.org\/en\/tools\/modified_atwater_calculator\/","title":{"rendered":"Modified Atwater ME Calculation"},"content":{"rendered":"\n<p class=\"is-style-paragraph__lines-left\" style=\"font-size:20px\"><strong>Overview<\/strong><\/p>\n\n\n\n<p>This calculation method was proposed in the 1980s based on measured pet food data and is officially adopted by AAFCO. When no feeding trial or direct measurement is available, AAFCO allows energy values for label purposes to be calculated using this method. <br><br>It is a practical, experience-based approach that reflects the average digestibility of typical commercial pet foods, making it simple and convenient to use. However, depending on the actual digestibility of a specific formula, the result may under- or overestimate true energy\u2014so interpretation should be made with care.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-wide\"\/>\n\n\n  <style>\n    :root{ --nrc-border:#e5e7eb; --nrc-accent:#0ea5e9; }\n    .nrc-wrap{max-width:820px;margin:24px auto;padding:0 8px;color:inherit;}\n    .nrc-card{border:1px solid var(--nrc-border);border-radius:16px;padding:16px;background:#fff;margin-bottom:16px}\n    .nrc-title{font-weight:700;font-size:1.375rem;margin:0 0 4px;color:inherit}\n    .nrc-row{display:grid;grid-template-columns:1fr 1fr;gap:12px}\n    @media(max-width:640px){ .nrc-row{grid-template-columns:1fr} }\n    .nrc-input{width:100%;padding:10px 12px;border:1px solid #d1d5db;border-radius:10px;font-size:1rem;color:inherit;background:#fff;box-shadow:none;outline:none;}\n    .nrc-input:focus{border-color:#9ca3af;box-shadow:0 0 0 3px rgba(156,163,175,.2);}\n    .nrc-label{font-size:.9rem;color:inherit;opacity:.75;display:block;margin:6px 0 4px}\n    .nrc-seg{display:flex;gap:8px;margin:6px 0 10px}\n    .nrc-seg button{flex:1;padding:10px 12px;border:1px solid var(--nrc-border);border-radius:999px;background:#fff;color:inherit;font-weight:700;font-size:1rem;line-height:1.2;display:inline-flex;align-items:center;justify-content:center;white-space:nowrap;text-shadow:none}\n    .nrc-seg button[aria-pressed=\"true\"]{border-color:var(--nrc-accent);box-shadow:0 0 0 3px rgba(14,165,233,.15)}\n    .nrc-kpi{font-size:2.1rem;font-weight:800;letter-spacing:.2px;margin:2px 0 8px;font-variant-numeric:tabular-nums;color:inherit}\n    .nrc-kpi-sub{font-size:.85rem;opacity:.7;color:inherit}\n    .nrc-table{display:grid;grid-template-columns:1fr auto;gap:6px;border-top:1px dashed var(--nrc-border);padding-top:10px;margin-top:10px}\n    .nrc-table .lbl{font-size:.95rem;color:inherit;opacity:.75}\n    .nrc-table .val{font-size:1rem;font-weight:600;text-align:right;font-variant-numeric:tabular-nums;color:inherit}\n    .nrc-note{margin-top:6px;font-size:.80rem;line-height:1.5;color:inherit;opacity:.75;background:transparent;border-left:none;padding:2px 0;font-style:italic}\n    .nrc-warn{color:#b91c1c;font-size:.95rem;margin-top:6px}\n  <\/style>\n\n  <div class=\"nrc-wrap\" id=\"atwater-app\" data-version=\"1.3.0\">\n    <h2 class=\"nrc-title\">Modified Atwater (3.5\/8.5\/3.5) ME Calculator<\/h2>\n\n    <div class=\"nrc-card\">\n      <div class=\"nrc-label\">Species<\/div>\n      <div class=\"nrc-seg\" role=\"tablist\" aria-label=\"species\">\n        <button id=\"atw-dog\" type=\"button\" role=\"tab\" aria-selected=\"true\" aria-pressed=\"true\">Dog<\/button>\n        <button id=\"atw-cat\" type=\"button\" role=\"tab\" aria-selected=\"false\" aria-pressed=\"false\">Cat<\/button>\n      <\/div>\n\n      <div class=\"nrc-row\">\n        <div>\n          <label class=\"nrc-label\" for=\"atw-cp\">Crude protein (CP) %<\/label>\n          <input type=\"number\" id=\"atw-cp\" class=\"nrc-input\" value=\"0\" step=\"0.01\" min=\"0\" max=\"100\" \/>\n        <\/div>\n        <div>\n          <label class=\"nrc-label\" for=\"atw-fat\">Crude fat (Fat) %<\/label>\n          <input type=\"number\" id=\"atw-fat\" class=\"nrc-input\" value=\"0\" step=\"0.01\" min=\"0\" max=\"100\" \/>\n        <\/div>\n      <\/div>\n      <div class=\"nrc-row\">\n        <div>\n          <label class=\"nrc-label\" for=\"atw-cf\">Crude fiber (CF) %<\/label>\n          <input type=\"number\" id=\"atw-cf\" class=\"nrc-input\" value=\"0\" step=\"0.01\" min=\"0\" max=\"100\" \/>\n        <\/div>\n        <div>\n          <label class=\"nrc-label\" for=\"atw-ash\">Ash %<\/label>\n          <input type=\"number\" id=\"atw-ash\" class=\"nrc-input\" value=\"0\" step=\"0.01\" min=\"0\" max=\"100\" \/>\n        <\/div>\n      <\/div>\n      <div class=\"nrc-row\">\n        <div>\n          <label class=\"nrc-label\" for=\"atw-moisture\">Moisture %<\/label>\n          <input type=\"number\" id=\"atw-moisture\" class=\"nrc-input\" value=\"0\" step=\"0.01\" min=\"0\" max=\"100\" \/>\n        <\/div>\n        <div>\n          <label class=\"nrc-label\">Carbohydrate (NFE) %<\/label>\n          <input type=\"text\" id=\"atw-nfe\" class=\"nrc-input\" value=\"100.00\" readonly \/>\n        <\/div>\n      <\/div>\n      <div id=\"atw-sumWarning\" class=\"nrc-warn\" style=\"display:none\">Total exceeds 100%. Please review your inputs.<\/div>\n      <div class=\"nrc-note\">NFE = 100 \u2212 (CP + Fat + CF + Ash + Moisture).<br>Modified Atwater directly estimates ME using 3.5\/8.5\/3.5 factors.<\/div>\n    <\/div>\n\n    <div class=\"nrc-card\">\n      <div class=\"nrc-kpi\" id=\"atw-kcalKg\">- kcal\/kg<\/div>\n      <div class=\"nrc-kpi-sub\" id=\"atw-kpiSub\">Modified Atwater \/ Dog (as-fed)<\/div>\n\n      <div class=\"nrc-table\" style=\"margin-top:12px\">\n        <div class=\"lbl\">Dry matter (DM %)<\/div><div class=\"val\" id=\"atw-dmPct\">-<\/div>\n        <div class=\"lbl\">ME (kcal\/kg DM)<\/div><div class=\"val\" id=\"atw-meDm\">-<\/div>\n      <\/div>\n      <div class=\"nrc-table\">\n        <div class=\"lbl\">Protein contribution (kcal\/kg)<\/div><div class=\"val\" id=\"atw-contrP\">-<\/div>\n        <div class=\"lbl\">Fat contribution (kcal\/kg)<\/div><div class=\"val\" id=\"atw-contrF\">-<\/div>\n        <div class=\"lbl\">Carbohydrate contribution (kcal\/kg)<\/div><div class=\"val\" id=\"atw-contrC\">-<\/div>\n      <\/div>\n      <div class=\"nrc-table\">\n        <div class=\"lbl\">CP_DM (%)<\/div><div class=\"val\" id=\"atw-cpDm\">-<\/div>\n        <div class=\"lbl\">Fat_DM (%)<\/div><div class=\"val\" id=\"atw-fatDm\">-<\/div>\n        <div class=\"lbl\">CF_DM (%)<\/div><div class=\"val\" id=\"atw-cfDm\">-<\/div>\n        <div class=\"lbl\">NFE_DM (%)<\/div><div class=\"val\" id=\"atw-nfeDm\">-<\/div>\n      <\/div>\n\n      <div class=\"nrc-note\">Factors: CP=3.5, Fat=8.5, NFE=3.5 (kcal\/g, as-fed). There is no species-specific difference.<\/div>\n    <\/div>\n  <\/div>\n\n  <script>\n  (function(){\n    const $ = (id) => document.getElementById(id);\n    const fmt = (n, d=0) => (isFinite(n)? n.toLocaleString(undefined,{minimumFractionDigits:d,maximumFractionDigits:d}) : '-');\n    const clamp = (n,min,max)=>Math.max(min,Math.min(max,n));\n\n    const els = {\n      dog: $('atw-dog'), cat: $('atw-cat'),\n      moisture: $('atw-moisture'), cp: $('atw-cp'), fat: $('atw-fat'), cf: $('atw-cf'), ash: $('atw-ash'), nfe: $('atw-nfe'),\n      sumWarn: $('atw-sumWarning'),\n      kcalKg: $('atw-kcalKg'), kpiSub: $('atw-kpiSub'), dmPct: $('atw-dmPct'), meDm: $('atw-meDm'),\n      contrP: $('atw-contrP'), contrF: $('atw-contrF'), contrC: $('atw-contrC'),\n      cpDm: $('atw-cpDm'), fatDm: $('atw-fatDm'), cfDm: $('atw-cfDm'), nfeDm: $('atw-nfeDm')\n    };\n\n    let species = 'dog';\n    function pick(sp){ species = sp; const d=species==='dog'; els.dog.setAttribute('aria-pressed', d); els.dog.setAttribute('aria-selected', d); els.cat.setAttribute('aria-pressed', !d); els.cat.setAttribute('aria-selected', !d); recalc(); }\n    els.dog.addEventListener('click', ()=>pick('dog')); els.cat.addEventListener('click', ()=>pick('cat'));\n\n    function num(el){ const v = parseFloat((el.value||'').toString().replace(\/[\"']\/g,'')); return Number.isFinite(v)? v:0; }\n\n    function recalc(){\n      const m = clamp(num(els.moisture),0,100);\n      const cp = clamp(num(els.cp),0,100);\n      const fat = clamp(num(els.fat),0,100);\n      const cf = clamp(num(els.cf),0,100);\n      const ash = clamp(num(els.ash),0,100);\n\n      const sumAF = m + cp + fat + cf + ash;\n      const nfeAF = 100 - sumAF;\n      els.nfe.value = isFinite(nfeAF)? nfeAF.toFixed(2) : '';\n      els.sumWarn.style.display = sumAF>100.0001? 'block':'none';\n\n      const dmPct = clamp(100 - m, 0, 100);\n      \/\/ Modified Atwater (as-fed)\n      const prot = 3.5 * cp;        \/\/ kcal\/100g as-fed\n      const fatk = 8.5 * fat;       \/\/ kcal\/100g as-fed\n      const carb = 3.5 * nfeAF;     \/\/ kcal\/100g as-fed\n      const ME100 = prot + fatk + carb;      \/\/ kcal\/100g as-fed\n      const ME_AF_kg = ME100 * 10;           \/\/ kcal\/kg as-fed\n      const ME_DM_kg = dmPct>0 ? (ME_AF_kg \/ (dmPct\/100)) : NaN; \/\/ kcal\/kg DM\n\n      els.kcalKg.textContent = isFinite(ME_AF_kg)? fmt(ME_AF_kg,0) + ' kcal\/kg' : '- kcal\/kg';\n      els.kpiSub.textContent = `Modified Atwater \/ ${species==='dog'?'Dog':'Cat'} (as-fed)`;\n\n      els.dmPct.textContent = fmt(dmPct,2) + ' %';\n      els.meDm.textContent = isFinite(ME_DM_kg)? fmt(ME_DM_kg,0) : '-';\n\n      els.contrP.textContent = fmt(prot*10,0);  \/\/ kcal\/kg\n      els.contrF.textContent = fmt(fatk*10,0);\n      els.contrC.textContent = fmt(carb*10,0);\n\n      const toDM = (x)=> dmPct>0? (x\/dmPct)*100 : 0;\n      els.cpDm.textContent = fmt(toDM(cp),2) + ' %';\n      els.fatDm.textContent = fmt(toDM(fat),2) + ' %';\n      els.cfDm.textContent = fmt(toDM(cf),2) + ' %';\n      els.nfeDm.textContent = fmt(toDM(nfeAF),2) + ' %';\n    }\n\n    ['change','keyup','input'].forEach(ev=>{\n      ['atw-moisture','atw-cp','atw-fat','atw-cf','atw-ash'].forEach(id=>{\n        document.getElementById(id).addEventListener(ev, recalc);\n      });\n    });\n\n    recalc();\n  })();\n  <\/script>\n  \n\n\n\n<div class=\"epb-linkcard is-style-epb-radius__0 is-style-epb-hover__floating wp-block-emanon-premium-blocks-linkcard epb-margin-top__default epb-margin-top__default-sp epb-margin-top__default-tablet\" style=\"--epb-linkcard-arrow-size:16px\"><div class=\"epb-linkcard_label icon-edit\" data-fontweight=\"normal\" style=\"font-size:12px;letter-spacing:0.15em\">Related article<\/div><a class=\"epb-linkcard_link\" href=\"https:\/\/first-reach.org\/en\/contents\/petfood-calorie-me-calculation\/\" target=\"_blank\" rel=\"noopener noreferrer\"><div class=\"epb-linkcard_inner epb-arrow-effect-right is-style-epb-arrow__01\" style=\"padding-top:16px;padding-bottom:16px;padding-left:24px;border-style:solid;border-top-width:2px;border-bottom-width:2px;border-left-width:2px;border-right-width:2px;border-color:#e5e7e8\"><div class=\"epb-linkcard_heading\"><div class=\"epb-linkcard_title\" data-fontweight=\"normal\" style=\"--epb-title-font-sp:16px;--epb-title-font-tablet:16px;--epb-title-font-pc:16px;letter-spacing:0.04em;color:#333333\">Calorie calculation formulas for pet food and a practical understanding and application of ME<\/div><\/div><\/div><\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Overview This calculation method was proposed in the 1980s based on measured pet food data and is officially adopted by AAFCO. When no feeding trial or direct measurement is available, AAFCO allows energy values for label purposes to be calculated using this method. It is a practical, experience-based approach that reflects the average digestibility of [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":42443,"parent":42472,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-42432","page","type-page","status-publish","has-post-thumbnail","hentry"],"_links":{"self":[{"href":"https:\/\/first-reach.org\/en\/wp-json\/wp\/v2\/pages\/42432","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/first-reach.org\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/first-reach.org\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/first-reach.org\/en\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/first-reach.org\/en\/wp-json\/wp\/v2\/comments?post=42432"}],"version-history":[{"count":4,"href":"https:\/\/first-reach.org\/en\/wp-json\/wp\/v2\/pages\/42432\/revisions"}],"predecessor-version":[{"id":48354,"href":"https:\/\/first-reach.org\/en\/wp-json\/wp\/v2\/pages\/42432\/revisions\/48354"}],"up":[{"embeddable":true,"href":"https:\/\/first-reach.org\/en\/wp-json\/wp\/v2\/pages\/42472"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/first-reach.org\/en\/wp-json\/wp\/v2\/media\/42443"}],"wp:attachment":[{"href":"https:\/\/first-reach.org\/en\/wp-json\/wp\/v2\/media?parent=42432"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}