THC/CBD Ratio Calculator
ANA›Life Services Authority›National Calculator Authority›THC/CBD Ratio Calculator
.calc-container { max-width: 640px; margin: 2rem 0; padding: 1.5rem; background: #fff; border: 1px solid #ddd; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.06); font-family: system-ui, -apple-system, sans-serif; } .calc-container h3 { font-family: Georgia, serif; font-size: 1.15rem; color: #1a1a1a; margin-bottom: 1rem; padding-bottom: 0.5rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-row { display: flex; align-items: center; gap: 0.75rem; margin-bottom: 0.75rem; flex-wrap: wrap; } .calc-row label { min-width: 160px; font-size: 0.9rem; color: #333; font-weight: 500; } .calc-row input[type="number"], .calc-row select { flex: 1; min-width: 120px; max-width: 200px; padding: 0.5rem 0.6rem; border: 1px solid #ccc; border-radius: 4px; font-size: 0.9rem; font-family: system-ui, sans-serif; color: #1a1a1a; background: #fafaf8; } .calc-row input:focus, .calc-row select:focus { outline: none; border-color: var(--ac, #3d5a80); box-shadow: 0 0 0 2px rgba(26,74,138,0.12); } .calc-row .unit { font-size: 0.82rem; color: #888; min-width: 30px; } .calc-btn { display: inline-block; margin-top: 0.5rem; padding: 0.55rem 1.5rem; background: var(--ac, #3d5a80); color: #fff; border: none; border-radius: 4px; font-size: 0.9rem; font-weight: 600; cursor: pointer; font-family: system-ui, sans-serif; } .calc-btn:hover { opacity: 0.9; } .calc-result { margin-top: 1.25rem; padding: 1rem 1.25rem; background: #f0f6fc; border-left: 3px solid var(--ac, #3d5a80); border-radius: 0 6px 6px 0; display: none; } .calc-result.visible { display: block; } .calc-result-label { font-size: 0.78rem; text-transform: uppercase; letter-spacing: 0.06em; color: #666; margin-bottom: 0.25rem; } .calc-result-value { font-size: 1.6rem; font-weight: 700; color: var(--ac, #3d5a80); } .calc-result-detail { font-size: 0.85rem; color: #555; margin-top: 0.5rem; line-height: 1.5; } .calc-note { margin-top: 1rem; font-size: 0.8rem; color: #888; font-style: italic; } .calc-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 0.75rem; margin-top: 0.75rem; } .calc-grid-item { padding: 0.6rem 0.8rem; background: #f8f9fa; border-radius: 4px; border: 1px solid #eee; } .calc-grid-item .label { font-size: 0.75rem; color: #888; text-transform: uppercase; letter-spacing: 0.04em; } .calc-grid-item .value { font-size: 1.1rem; font-weight: 600; color: #1a1a1a; } @media (max-width: 720px) { .calc-row { flex-direction: column; align-items: flex-start; gap: 0.3rem; } .calc-row label { min-width: auto; } .calc-row input[type="number"], .calc-row select { max-width: 100%; width: 100%; } .calc-grid { grid-template-columns: 1fr; } } .calc-chart { margin: 1rem 0; text-align: center; } .calc-chart svg { max-width: 100%; height: auto; } .calc-chart-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 0.6rem 1.2rem; margin-top: 0.6rem; font-size: 0.8rem; color: #555; } .calc-chart-legend span { display: inline-flex; align-items: center; gap: 0.3rem; } .calc-chart-legend i { display: inline-block; width: 10px; height: 10px; border-radius: 2px; font-style: normal; } .calc-related { max-width: 640px; margin: 2rem 0 1rem; padding: 1.25rem 1.5rem; background: #f8f9fa; border: 1px solid #e8e8e8; border-radius: 8px; } .calc-related h3 { font-family: Georgia, serif; font-size: 1rem; color: #1a1a1a; margin: 0 0 0.75rem; padding-bottom: 0.4rem; border-bottom: 2px solid var(--ac, #3d5a80); } .calc-related-list { list-style: none; padding: 0; margin: 0 0 0.75rem; display: grid; grid-template-columns: 1fr 1fr; gap: 0.4rem 1.5rem; } .calc-related-list li a { font-size: 0.88rem; color: var(--ac, #3d5a80); text-decoration: none; } .calc-related-list li a:hover { text-decoration: underline; } .calc-browse-all { margin: 0.5rem 0 0; font-size: 0.9rem; font-weight: 600; } .calc-browse-all a { color: var(--ac, #3d5a80); text-decoration: none; } .calc-browse-all a:hover { text-decoration: underline; } @media (max-width: 720px) { .calc-related-list { grid-template-columns: 1fr; } }
THC/CBD Ratio Calculator
Enter the THC and CBD percentages (or mg) from your cannabis product label to calculate the ratio and understand its likely effects profile.
THC Amount
CBD Amount
Unit
Percent (%) Milligrams (mg)
Calculate
function thcCalc() { var thcVal = parseFloat(document.getElementById('thc-thc-amount').value); var cbdVal = parseFloat(document.getElementById('thc-cbd-amount').value); var unit = document.getElementById('thc-unit').value; var resultDiv = document.getElementById('thc-result');
// --- Validation --- if (isNaN(thcVal) || isNaN(cbdVal)) { resultDiv.style.display = 'block'; resultDiv.innerHTML = '⚠ Please enter valid numbers for both THC and CBD.'; return; } if (thcVal ⚠ Values cannot be negative.'; return; } if (unit === 'percent' && (thcVal > 100 || cbdVal > 100)) { resultDiv.style.display = 'block'; resultDiv.innerHTML = '⚠ Percentage values cannot exceed 100%.'; return; } if (unit === 'percent' && (thcVal + cbdVal) > 100) { resultDiv.style.display = 'block'; resultDiv.innerHTML = '⚠ Combined THC + CBD cannot exceed 100%.'; return; } if (thcVal === 0 && cbdVal === 0) { resultDiv.style.display = 'block'; resultDiv.innerHTML = '⚠ Both values are zero. Please enter at least one non-zero value.'; return; }
// --- Core Calculations --- var unitLabel = (unit === 'percent') ? '%' : ' mg';
// Ratio expressed as THC : CBD var ratioTHC, ratioCBD, ratioStr, dominanceStr, profileStr, profileColor;
if (cbdVal === 0) { ratioStr = 'THC Only (No CBD)'; dominanceStr = 'Pure THC'; profileStr = 'Highly psychoactive; no CBD modulation present.'; profileColor = '#c0392b'; ratioTHC = null; ratioCBD = null; } else if (thcVal === 0) { ratioStr = 'CBD Only (No THC)'; dominanceStr = 'Pure CBD'; profileStr = 'Non-psychoactive; CBD-dominant product.'; profileColor = '#27ae60'; ratioTHC = null; ratioCBD = null; } else { // Simplify ratio by dividing both by GCD (using decimal GCD via scaling) var scale = 100; var thcInt = Math.round(thcVal * scale); var cbdInt = Math.round(cbdVal * scale);
function gcd(a, b) { return b === 0 ? a : gcd(b, a % b); } var g = gcd(thcInt, cbdInt); ratioTHC = thcInt / g; ratioCBD = cbdInt / g;
// Simplify further if ratio numbers are large — express as decimal ratio var rawRatio = thcVal / cbdVal; // THC per 1 CBD if (ratioTHC > 50 || ratioCBD > 50) { ratioStr = rawRatio.toFixed(2) + ' : 1 (THC : CBD)'; } else { ratioStr = ratioTHC + ' : ' + ratioCBD + ' (THC : CBD)'; }
// Dominance classification if (rawRatio >= 10) { dominanceStr = 'High THC Dominant'; profileStr = 'Strong psychoactive effects; minimal CBD modulation. Suitable for experienced users.'; profileColor = '#c0392b'; } else if (rawRatio >= 4) { dominanceStr = 'Moderate THC Dominant'; profileStr = 'Psychoactive with some CBD balance. Common in recreational products.'; profileColor = '#e67e22'; } else if (rawRatio >= 2) { dominanceStr = 'Mild THC Dominant'; profileStr = 'Moderate psychoactivity; CBD begins to temper THC effects.'; profileColor = '#f39c12'; } else if (rawRatio > 0.5 && rawRatio = 0.1) { dominanceStr = 'CBD Dominant'; profileStr = 'Low psychoactivity; CBD effects predominate. Common in therapeutic products.'; profileColor = '#27ae60'; } else { dominanceStr = 'High CBD Dominant'; profileStr = 'Minimal to no psychoactivity; primarily CBD-driven effects.'; profileColor = '#1abc9c'; } }
// Total cannabinoid content var total = thcVal + cbdVal;
// CBD modulation index: CBD / (THC + CBD) * 100 var modulationIndex = (total > 0) ? (cbdVal / total * 100) : 0;
- // THC equivalent (accounting for CBD modulation — simplified Russo model)
- // Effective THC potency is reduced when CBD is present
- // Approximate: effective THC = THC * (1 - 0.5 * (CBD / (THC + CBD)))
- var effectiveTHC = (thcVal > 0 && cbdVal > 0)
- ? thcVal * (1 - 0.5 * (cbdVal / total))
- thcVal;
// --- Build Output --- var html = '### Results '; html += '';
function row(label, value, color) { return '' + '' + label + '' + '' + value + '' + ''; }
html += row('THC Amount', thcVal.toFixed(2) + unitLabel); html += row('CBD Amount', cbdVal.toFixed(2) + unitLabel); html += row('Total Cannabinoids', total.toFixed(2) + unitLabel); html += row('THC : CBD Ratio', ratioStr, profileColor); html += row('Dominance Profile', dominanceStr, profileColor); html += row('CBD Modulation Index', modulationIndex.toFixed(1) + '% of total cannabinoids is CBD'); if (thcVal > 0 && cbdVal > 0) { html += row('Estimated Effective THC', effectiveTHC.toFixed(2) + unitLabel + ' (CBD-modulated)'); }
html += '';
html += '' + 'Effects Profile: ' + profileStr + '';
resultDiv.style.display = 'block'; resultDiv.innerHTML = html; }
#### Formulas Used
THC : CBD Ratio — Divide both values by their Greatest Common Divisor (GCD) to express the simplest whole-number ratio:
Ratio = (THC / GCD) : (CBD / GCD)
CBD Modulation Index — The proportion of total cannabinoids that is CBD:
Modulation Index (%) = CBD / (THC + CBD) × 100
Estimated Effective THC — A simplified model (based on Russo's entourage effect research) estimating how CBD attenuates perceived THC potency:
Effective THC = THC × (1 − 0.5 × (CBD / (THC + CBD)))
The 0.5 coefficient reflects that CBD partially (not fully) antagonises THC at CB1 receptors.
#### Assumptions & References
- Russo, E.B. (2011). Taming THC: potential cannabis synergy and phytocannabinoid-terpenoid entourage effects. British Journal of Pharmacology, 163(7), 1344–1364.
- MacCallum, C.A. & Russo, E.B. (2018). Practical considerations in medical cannabis administration and dosing. European Journal of Internal Medicine, 49, 12–19.
More Calculators
- Evapotranspiration (ET) & Watering Schedule Calculator
- Solar Panel Repair vs Replace Cost Calculator
- Sprinkler Head Flow Rate Calculator
- Athlete Body Fat Percentage Calculator
- Sprint Speed & Acceleration Calculator
- Solar Panel Degradation & Performance Loss Calculator
- Irrigation Zone Run Time Calculator
- Overtime Cost Calculator
- Cost Per Hire Calculator
- Employee Turnover Cost Calculator
- FTE (Full-Time Equivalent) Calculator
- Headcount Planning Calculator
Read Next
Study Time Planner ANA › Life Services Authority › National Calculator Authority › Study Time Planner .calc-container { max-width: 640px; margin:...