Ideal Weight Calculator

Discover your scientifically-based ideal weight range using multiple medical formulas. Personalized analysis based on your gender, height, age, and body frame.

Track. Learn. Improve.
years
cm
What's my frame size? ?

Determine your body frame size by measuring your wrist circumference:

  • Small frame: Wrist < 17cm (men) or < 15cm (women)
  • Medium frame: Average measurements
  • Large frame: Wrist > 19cm (men) or > 17cm (women)
Your personalized results will appear here instantly as you enter your information

Scientific References

  1. Devine BJ. Gentamicin therapy. Drug Intell Clin Pharm. 1974;8:650-655.
  2. Robinson JD, Lupkiewicz SM, Palenik L, Lopez LM, Ariet M. Determination of ideal body weight for drug dosage calculations. Am J Hosp Pharm. 1983;40:1016-1019.
  3. Miller DR, Carlson JD, Lloyd BJ, Day BJ. Determining ideal body weight. Am J Hosp Pharm. 1983;40:1622.
  4. Hamwi GJ. Therapy: changing dietary concepts. In: Danowski TS, ed. Diabetes Mellitus: Diagnosis and Treatment. New York, NY: American Diabetes Association; 1964:73-78.
  5. World Health Organization. Body mass index - BMI. WHO Global Health Observatory. Accessed June 26, 2025.

Calculator developed by QuicklyBetter.com | Last updated: June 2025

Track. Learn. Improve.

`); printWindow.document.close(); setTimeout(() => { printWindow.print(); }, 500); }); // Live calculation function function calculateLiveResults() { // Don't calculate if required fields are missing const gender = document.querySelector('input[name="gender"]:checked')?.value; const age = parseInt(document.querySelector('input[name="age"]').value); let height_cm = 0; const heightUnit = document.querySelector('input[name="height_unit"]:checked').value; if (heightUnit === 'cm') { height_cm = parseFloat(document.querySelector('input[name="height_cm"]').value) || 0; } else { const feet = parseInt(document.querySelector('input[name="height_ft"]').value) || 0; const inches = parseInt(document.querySelector('input[name="height_in"]').value) || 0; height_cm = (feet * 30.48) + (inches * 2.54); } if (!gender || !age || !height_cm || age < 18 || height_cm < 100) { liveResultsPreview.innerHTML = `
Please enter your height and age to see personalized results
`; return; } // Get other form values const frame = document.querySelector('select[name="frame"]').value; const weight_unit = document.querySelector('input[name="weight_unit"]:checked').value; const current_weight = parseFloat(document.querySelector('input[name="current_weight"]').value) || 0; // Get selected formulas const selectedFormulas = []; document.querySelectorAll('input[name="formulas[]"]:checked').forEach(checkbox => { selectedFormulas.push(checkbox.value); }); if (selectedFormulas.length === 0) { liveResultsPreview.innerHTML = `
Please select at least one formula
`; return; } // Calculate results using the same logic as the AJAX function const height_in = height_cm / 2.54; const inches_over_5ft = Math.max(0, height_in - 60); // Frame adjustment factors let frame_factor = 1.0; if (frame === 'small') { frame_factor = 0.9; // 10% lower for small frame } else if (frame === 'large') { frame_factor = 1.1; // 10% higher for large frame } const weights = {}; const formula_totals = []; // BMI-based calculation if (selectedFormulas.includes('bmi')) { const bmi_min_weight = 18.5 * Math.pow(height_cm/100, 2); const bmi_max_weight = 24.9 * Math.pow(height_cm/100, 2); const bmi_avg = (bmi_min_weight + bmi_max_weight) / 2; const bmi_ideal = bmi_avg * frame_factor; weights['BMI-Based'] = bmi_ideal; formula_totals.push(bmi_ideal); } // Devine Formula if (selectedFormulas.includes('devine')) { let devine; if (gender === 'male') { devine = (50 + (2.3 * inches_over_5ft)) * frame_factor; } else { devine = (45.5 + (2.3 * inches_over_5ft)) * frame_factor; } weights['Devine'] = devine; formula_totals.push(devine); } // Robinson Formula if (selectedFormulas.includes('robinson')) { let robinson; if (gender === 'male') { robinson = (52 + (1.9 * inches_over_5ft)) * frame_factor; } else { robinson = (49 + (1.7 * inches_over_5ft)) * frame_factor; } weights['Robinson'] = robinson; formula_totals.push(robinson); } // Miller Formula if (selectedFormulas.includes('miller')) { let miller; if (gender === 'male') { miller = (56.2 + (1.41 * inches_over_5ft)) * frame_factor; } else { miller = (53.1 + (1.36 * inches_over_5ft)) * frame_factor; } weights['Miller'] = miller; formula_totals.push(miller); } // Hamwi Formula if (selectedFormulas.includes('hamwi')) { let hamwi; if (gender === 'male') { hamwi = (48.0 + (2.7 * inches_over_5ft)) * frame_factor; } else { hamwi = (45.5 + (2.2 * inches_over_5ft)) * frame_factor; } weights['Hamwi'] = hamwi; formula_totals.push(hamwi); } // Calculate average const average = formula_totals.reduce((acc, val) => acc + val, 0) / formula_totals.length; // Convert to pounds if requested const displayWeights = {}; let displayAverage = average; if (weight_unit === 'lb') { for (const [formula, weight] of Object.entries(weights)) { displayWeights[formula] = Math.round(weight * 2.20462 * 10) / 10; } displayAverage = Math.round(average * 2.20462 * 10) / 10; } else { for (const [formula, weight] of Object.entries(weights)) { displayWeights[formula] = Math.round(weight * 10) / 10; } displayAverage = Math.round(average * 10) / 10; } // Create the comparison data if current weight is available let comparison = null; if (current_weight > 0) { const difference = current_weight - displayAverage; const threshold = displayAverage * 0.05; let status = 'within_range'; let message = 'Your weight is within ideal range.'; if (difference > threshold) { status = 'above'; message = 'Your weight is above ideal range.'; } else if (difference < -threshold) { status = 'below'; message = 'Your weight is below ideal range.'; } comparison = { current_weight: current_weight, difference: Math.round(difference * 10) / 10, status: status, message: message }; } // Store the results calculationResults = { weights: displayWeights, average: displayAverage, height_cm: height_cm, unit: weight_unit, comparison: comparison }; // Display brief live preview let previewHtml = `
`; if (comparison) { const differenceClass = comparison.status === 'within_range' ? 'neutral' : (comparison.status === 'below' ? 'below' : 'above'); previewHtml += `
Current ${comparison.current_weight} ${weight_unit}
Ideal ${displayAverage} ${weight_unit}
${comparison.difference > 0 ? '+' : ''}${comparison.difference} ${weight_unit}
`; } else { previewHtml += `
Your Ideal Weight ${displayAverage} ${weight_unit}
`; } previewHtml += `
`; liveResultsPreview.innerHTML = previewHtml; } // Add input listeners for live calculation const allInputs = form.querySelectorAll('input, select'); allInputs.forEach(input => { input.addEventListener('input', calculateLiveResults); input.addEventListener('change', calculateLiveResults); }); // Initialize form with empty fields first, then calculate document.querySelector('input[name="age"]').value = ''; document.querySelector('input[name="height_cm"]').value = ''; document.querySelector('input[name="height_ft"]').value = ''; document.querySelector('input[name="height_in"]').value = ''; // Reset calculation results calculationResults = null; // Show placeholder message instead of calculation liveResultsPreview.innerHTML = '
Please enter your height and age to see personalized results
'; // Form submission for full results form.addEventListener('submit', function(e) { e.preventDefault(); // If we've already calculated results, display them without AJAX if (calculationResults) { displayResults(calculationResults); resultContainer.style.display = 'block'; reportActions.style.display = 'flex'; // Scroll to results resultContainer.scrollIntoView({ behavior: 'smooth', block: 'start' }); return; } // Otherwise, continue with AJAX for server-side calculation const formData = new FormData(form); formData.append('action', 'healthmaster_ideal_weight_calc'); // Validate form data const formulaCheckboxes = document.querySelectorAll('input[name="formulas[]"]:checked'); if (formulaCheckboxes.length === 0) { alert('Please select at least one formula.'); return; } // Show loading state resultContainer.innerHTML = `
Calculating your ideal weight...
`; resultContainer.style.display = 'block'; // Send AJAX request fetch("https://quicklybetter.com/wp-admin/admin-ajax.php", { method: 'POST', body: formData, cache: 'no-cache' }) .then(response => response.json()) .then(data => { if (data.success) { calculationResults = data.data; displayResults(calculationResults); resultContainer.style.display = 'block'; reportActions.style.display = 'flex'; // Save to calculation history saveCalculationToHistory(calculationResults); } else { resultContainer.innerHTML = `
${data.data.message}
`; } // Scroll to results resultContainer.scrollIntoView({ behavior: 'smooth', block: 'start' }); }) .catch(error => { resultContainer.innerHTML = `
An error occurred while calculating. Please try again.
`; console.error('Error:', error); }); }); // Save calculation to history function saveCalculationToHistory(results) { // Add timestamp to results const historyItem = { ...results, timestamp: new Date().toISOString() }; // Add to history array calculationHistory.push(historyItem); // Limit history to 5 items if (calculationHistory.length > 5) { calculationHistory.shift(); } } // Reset form button resetButton.addEventListener('click', function() { form.reset(); resultContainer.style.display = 'none'; reportActions.style.display = 'none'; emailFormContainer.style.display = 'none'; // Reset height inputs visibility document.getElementById('height-cm-input').style.display = 'block'; document.getElementById('height-ft-input').style.display = 'none'; // Reset calculation results calculationResults = null; // Reset live preview setTimeout(calculateLiveResults, 100); }); // Display comprehensive results (rest of the functions remain the same...) function displayResults(results) { let html = `

Your Personalized Ideal Weight Results

Track. Learn. Improve.

`; // Main results section html += `
`; // Summary cards html += `
`; // Primary result card html += `
Recommended Weight
${results.average} ${results.unit}
Based on scientific formulas
`; // Add comparison if current weight provided if (results.comparison) { const differenceClass = results.comparison.status === 'within_range' ? 'neutral' : (results.comparison.status === 'below' ? 'below' : 'above'); let statusIcon = '✓'; if (differenceClass === 'above') statusIcon = '↑'; if (differenceClass === 'below') statusIcon = '↓'; html += `
${statusIcon}
Current Weight
${results.comparison.current_weight} ${results.unit}
${results.comparison.difference > 0 ? '+' : ''}${results.comparison.difference} ${results.unit} ${results.comparison.message}
`; } html += `
`; // Close summary section // Formula results table html += `

Scientific Formula Breakdown

`; // Formula descriptions const formulaInfo = { 'BMI-Based': { year: 'Current', desc: 'Based on healthy BMI range (18.5-24.9)' }, 'Devine': { year: '1974', desc: 'Developed for medication dosing' }, 'Robinson': { year: '1983', desc: 'Refinement of Devine formula' }, 'Miller': { year: '1983', desc: 'Based on different population sample' }, 'Hamwi': { year: '1964', desc: 'Widely used in clinical settings' } }; // Add rows for each formula for (const [formula, weight] of Object.entries(results.weights)) { const info = formulaInfo[formula] || { year: '-', desc: '-' }; // Highlight row if it's closest to the average const isClosest = Math.abs(weight - results.average) < 0.5; html += ` `; } html += `
FormulaIdeal WeightYearDescription
${formula}${isClosest ? ' ' : ''}${weight} ${results.unit}${info.year}${info.desc}
`; html += `
`; // Close result-content // Set the HTML to the result container resultContainer.innerHTML = html; } // PDF download functionality const downloadPdfButton = document.getElementById('download-pdf-button'); downloadPdfButton.addEventListener('click', function() { if (!calculationResults) return; const { jsPDF } = window.jspdf; const doc = new jsPDF(); // Helper function for multiline text function addMultilineText(text, x, y, maxWidth, lineHeight) { const textLines = doc.splitTextToSize(text, maxWidth); doc.text(textLines, x, y); return textLines.length * lineHeight; } // Add styling - Header doc.setFontSize(24); doc.setTextColor(0, 87, 184); // #0057b8 doc.text("Ideal Weight Report", 20, 20); // Add tagline doc.setFontSize(12); doc.setTextColor(100, 100, 100); doc.text("Track. Learn. Improve. - QuicklyBetter.com", 20, 30); // Add separator line doc.setDrawColor(0, 87, 184); doc.setLineWidth(0.5); doc.line(20, 35, 190, 35); // Personal information section let yPos = 45; doc.setFontSize(16); doc.setTextColor(0, 0, 0); doc.text("Personal Details", 20, yPos); yPos += 10; doc.setFontSize(12); const gender = document.querySelector('input[name="gender"]:checked').value; doc.text(`Gender: ${gender === 'male' ? 'Male' : 'Female'}`, 25, yPos); yPos += 7; // Height in cm and imperial const heightCm = calculationResults.height_cm; const heightFt = Math.floor(heightCm / 30.48); const heightIn = Math.round((heightCm - (heightFt * 30.48)) / 2.54); doc.text(`Height: ${heightCm} cm (${heightFt}'${heightIn}")`, 25, yPos); yPos += 7; // Age const age = document.querySelector('input[name="age"]').value; doc.text(`Age: ${age} years`, 25, yPos); yPos += 7; // Body frame const frame = document.querySelector('select[name="frame"]').value; doc.text(`Body Frame: ${frame.charAt(0).toUpperCase() + frame.slice(1)}`, 25, yPos); yPos += 15; // Results summary doc.setFontSize(16); doc.setTextColor(0, 87, 184); doc.text("Results Summary", 20, yPos); yPos += 10; doc.setFontSize(12); doc.setTextColor(0, 0, 0); doc.text(`Recommended Weight: ${calculationResults.average} ${calculationResults.unit}`, 25, yPos); yPos += 7; // Add comparison if available if (calculationResults.comparison) { doc.text(`Current Weight: ${calculationResults.comparison.current_weight} ${calculationResults.unit}`, 25, yPos); yPos += 7; const difference = calculationResults.comparison.difference; doc.text(`Difference: ${difference > 0 ? '+' : ''}${difference} ${calculationResults.unit}`, 25, yPos); yPos += 7; doc.text(`Status: ${calculationResults.comparison.message}`, 25, yPos); yPos += 15; } else { yPos += 8; } // Formula breakdown doc.setFontSize(16); doc.setTextColor(0, 87, 184); doc.text("Formula Breakdown", 20, yPos); yPos += 10; doc.setFontSize(12); doc.setTextColor(0, 0, 0); // Add table header for formulas doc.setFillColor(245, 248, 250); // #f5f8fa doc.rect(25, yPos, 160, 8, 'F'); doc.setFont(undefined, 'bold'); doc.text("Formula", 30, yPos + 6); doc.text("Ideal Weight", 100, yPos + 6); doc.text("Year", 140, yPos + 6); doc.setFont(undefined, 'normal'); yPos += 12; // Formula descriptions const formulaInfo = { 'BMI-Based': { year: 'Current' }, 'Devine': { year: '1974' }, 'Robinson': { year: '1983' }, 'Miller': { year: '1983' }, 'Hamwi': { year: '1964' } }; // Add rows for each formula for (const [formula, weight] of Object.entries(calculationResults.weights)) { const info = formulaInfo[formula] || { year: '-' }; // Draw light gray border for rows if (Object.keys(calculationResults.weights).indexOf(formula) % 2 === 0) { doc.setFillColor(250, 250, 250); doc.rect(25, yPos - 4, 160, 8, 'F'); } doc.text(formula, 30, yPos); doc.text(`${weight} ${calculationResults.unit}`, 100, yPos); doc.text(info.year, 140, yPos); yPos += 8; } yPos += 10; // Add footnote if there's room if (yPos < 250) { doc.setFontSize(10); doc.setTextColor(100, 100, 100); yPos = 270; const today = new Date().toLocaleDateString(); doc.text(`Generated by QuicklyBetter.com on ${today}`, 20, yPos); yPos += 5; doc.setFont(undefined, 'italic'); const disclaimer = "This report is for informational purposes only and not a substitute for professional medical advice. Consult with healthcare professionals for personalized guidance."; addMultilineText(disclaimer, 20, yPos, 170, 5); } // Save the PDF doc.save("Ideal_Weight_Report_QuicklyBetter.pdf"); }); // Email form handling (similar to before but with QuicklyBetter branding) const emailForm = document.getElementById('ideal-weight-email-form'); emailForm.addEventListener('submit', async function(e) { e.preventDefault(); if (!calculationResults) return; const email = document.querySelector('#ideal-weight-email-form input[name="email"]').value; const gdpr = document.querySelector('#ideal-weight-email-form input[name="gdpr"]').checked; if (!email || !gdpr) { alert('Please complete all required fields.'); return; } // Show loading state emailFormContainer.innerHTML = `
Sending your report...
`; // Create form data const formData = new FormData(form); formData.append('action', 'healthmaster_ideal_weight_calc'); formData.append('email', email); formData.append('gdpr', 'true'); formData.append('send_email', 'true'); // Send data for email processing try { const response = await fetch("https://quicklybetter.com/wp-admin/admin-ajax.php", { method: 'POST', body: formData, cache: 'no-cache' }); const data = await response.json(); if (data.success) { emailFormContainer.innerHTML = `
Report successfully sent to ${email}!
`; setTimeout(() => { emailFormContainer.style.display = 'none'; }, 3000); } else { emailFormContainer.innerHTML = `
Error sending email: ${data.data.message}
`; // Add event listeners to the new buttons document.getElementById('retry-email').addEventListener('click', () => { // Restore original form emailFormContainer.innerHTML = emailForm.outerHTML; document.querySelector('#ideal-weight-email-form input[name="email"]').value = email; // Recreate the event listener document.getElementById('ideal-weight-email-form').addEventListener('submit', arguments.callee); document.getElementById('cancel-email').addEventListener('click', () => { emailFormContainer.style.display = 'none'; }); }); document.getElementById('cancel-email-error').addEventListener('click', () => { emailFormContainer.style.display = 'none'; }); } } catch (error) { emailFormContainer.innerHTML = `
An error occurred while sending the email. Please try again.
`; // Add event listeners to the new buttons document.getElementById('retry-email').addEventListener('click', () => { // Restore original form emailFormContainer.innerHTML = emailForm.outerHTML; document.querySelector('#ideal-weight-email-form input[name="email"]').value = email; // Recreate the event listener document.getElementById('ideal-weight-email-form').addEventListener('submit', arguments.callee); document.getElementById('cancel-email').addEventListener('click', () => { emailFormContainer.style.display = 'none'; }); }); document.getElementById('cancel-email-error').addEventListener('click', () => { emailFormContainer.style.display = 'none'; }); console.error('Error:', error); } }); });

Ideal Weight Calculator

Let’s be honest — figuring out what your healthy weight should be can be confusing. You’ve probably seen a dozen charts online, and each seems to give a different answer. Some make it too complicated. Others leave out key details. That’s exactly why we built this simple calculator — to help you get a clear, science-based answer that’s actually useful.

This tool isn’t about pushing unrealistic goals. It’s about showing you a healthy weight range based on what matters: your height, gender, age, and body frame. Whether you’re working on fitness, tracking progress, or just checking in, it’s designed to give you helpful information without the noise.

What Does “Healthy Weight” Really Mean?

There’s no single “correct” number. A healthy weight is a range where your body functions well. You’ve got steady energy, you move comfortably, and your joints aren’t under stress. That number can look different from one person to the next — and that’s okay.

This calculator takes into account the details that truly matter. It doesn’t rely on body mass index (BMI) alone. Instead, it uses your personal data to generate a range of healthy weights you can use as a reference point.

How the Calculator Works

We’ve based this tool on three well-respected medical formulas that healthcare professionals often use:

Each formula gives a slightly different estimate. When shown together, you get a practical weight range instead of a fixed target — because real health isn’t one-size-fits-all.

How to Use It

  1. Select your gender
  2. Enter your age in years
  3. Input your height (in cm or feet/inches)
  4. Choose your frame size: small, medium, or large
  5. Optionally, enter your current weight for comparison
  6. Click “Calculate”

The tool will generate a healthy weight range within seconds, based on multiple formulas. No account needed. No fluff. Just useful results you can apply to your health goals.

How Accurate Is It?

Like any tool, this one has its limits. It doesn’t factor in muscle mass, pregnancy, or athletic body types. If you’re someone with higher-than-average muscle or unique health conditions, your ideal range might sit a bit outside the suggested numbers. And that’s completely fine.

Think of this as a guide — not a strict rule. It’s especially helpful if you’re just starting to track your health or trying to find a safe goal weight to aim for.

What Experience Has Taught Me

Having worked with both fitness beginners and experienced athletes, I’ve seen how easy it is to become obsessed with numbers. But those numbers don’t tell the whole story. Feeling good, moving well, and having energy every day — those are better indicators of health than any scale reading.

This calculator is just one tool in your toolbox. It’s there to support your journey, not dictate it.

Why Use This Weight Tool?

Because guessing isn’t good enough. With this calculator, you’re using real formulas backed by professionals. You’ll get a weight range that reflects your body’s actual structure — not a generic one-size-fits-all suggestion.

It’s not about being “perfect.” It’s about having a realistic and healthy reference you can build on, no matter your goals.

Other Tools That Might Help

When to Get Expert Input

This tool is great for getting started, but it’s not a replacement for personalized medical advice. If you’re dealing with a medical condition, adjusting your diet, or planning a major health change, speak with a licensed doctor or registered dietitian. They’ll help you understand how to use your numbers in the bigger picture of your health.

Disclaimer: This tool is meant for general informational purposes only. It does not provide medical advice or diagnose any conditions.