Body fat percentage is a measurement of your total body mass that is composed of fat, as opposed to lean muscle, bones, and organs. Unlike BMI, which only looks at weight and height, body fat percentage gives a clearer picture of health and fitness levels.
The U.S. Navy Method
This calculator uses the U.S. Navy Body Fat formula, which is one of the most accurate tape-measure methods. It relies on specific circumference measurements to estimate body density. For the best results, measure yourself in the morning before eating.
Category
Men Range
Women Range
Essential Fat
2-5%
10-13%
Athletes
6-13%
14-20%
Fitness
14-17%
21-24%
Average
18-24%
25-31%
Obese
25%+
32%+
How to Measure Correctly
Height: Stand straight against a wall without shoes.
Neck: Measure below the larynx, sloping slightly downward to the front.
Waist: Men: Measure at the navel. Women: Measure at the narrowest point.
Hips (Women only): Measure at the widest point of the buttocks.
function toggleHips() {
var gender = document.getElementById("gender").value;
var hipsContainer = document.getElementById("hipsContainer");
if (gender === "female") {
hipsContainer.style.display = "block";
} else {
hipsContainer.style.display = "none";
}
}
function updateLabels() {
var units = document.getElementById("units").value;
var isMetric = (units === "metric");
document.getElementById("heightLabel").innerText = "Height (" + (isMetric ? "cm" : "in") + ")";
document.getElementById("weightLabel").innerText = "Weight (" + (isMetric ? "kg" : "lbs") + ")";
document.getElementById("neckLabel").innerText = "Neck Circumference (" + (isMetric ? "cm" : "in") + ")";
document.getElementById("waistLabel").innerText = "Waist Circumference (" + (isMetric ? "cm" : "in") + ")";
document.getElementById("hipsLabel").innerText = "Hip Circumference (" + (isMetric ? "cm" : "in") + ")";
}
function calculateBodyFat() {
var gender = document.getElementById("gender").value;
var units = document.getElementById("units").value;
var h = parseFloat(document.getElementById("height").value);
var w = parseFloat(document.getElementById("weight").value);
var n = parseFloat(document.getElementById("neck").value);
var wa = parseFloat(document.getElementById("waist").value);
var hi = parseFloat(document.getElementById("hips").value) || 0;
if (!h || !w || !n || !wa || (gender === "female" && !hi)) {
alert("Please enter all required measurements.");
return;
}
var bodyFat = 0;
var weightUnit = (units === "metric") ? "kg" : "lbs";
// Standardize to metric for calculation logic
var heightCm = (units === "metric") ? h : h * 2.54;
var neckCm = (units === "metric") ? n : n * 2.54;
var waistCm = (units === "metric") ? wa : wa * 2.54;
var hipCm = (units === "metric") ? hi : hi * 2.54;
if (gender === "male") {
// U.S. Navy formula for men (metric)
bodyFat = 495 / (1.0324 – 0.19077 * Math.log10(waistCm – neckCm) + 0.15456 * Math.log10(heightCm)) – 450;
} else {
// U.S. Navy formula for women (metric)
bodyFat = 495 / (1.29579 – 0.35004 * Math.log10(waistCm + hipCm – neckCm) + 0.22100 * Math.log10(heightCm)) – 450;
}
if (bodyFat < 2) bodyFat = 2; // Minimum floor for essential fat
var fatMass = (w * (bodyFat / 100)).toFixed(1);
var leanMass = (w – fatMass).toFixed(1);
displayResult(bodyFat, gender, fatMass, leanMass, weightUnit);
}
function displayResult(percentage, gender, fatMass, leanMass, unit) {
var resArea = document.getElementById("resultArea");
var pctDiv = document.getElementById("fatPercentage");
var catDiv = document.getElementById("fatCategory");
var massDiv = document.getElementById("fatMass");
pctDiv.innerText = percentage.toFixed(1) + "%";
massDiv.innerText = "Fat Mass: " + fatMass + " " + unit + " | Lean Mass: " + leanMass + " " + unit;
var category = "";
if (gender === "male") {
if (percentage < 6) category = "Essential Fat";
else if (percentage < 14) category = "Athlete";
else if (percentage < 18) category = "Fitness";
else if (percentage < 25) category = "Average";
else category = "Obese";
} else {
if (percentage < 14) category = "Essential Fat";
else if (percentage < 21) category = "Athlete";
else if (percentage < 25) category = "Fitness";
else if (percentage < 32) category = "Average";
else category = "Obese";
}
catDiv.innerText = "Category: " + category;
resArea.style.display = "block";
resArea.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}