Body fat percentage (BFP) is a superior health metric compared to Body Mass Index (BMI). While BMI only considers weight and height, the body fat percentage distinguishes between lean muscle mass and adipose tissue. This calculator uses the U.S. Navy Circumference Method, which is one of the most accurate tape-measure methods available for estimating body composition at home.
How the U.S. Navy Method Works
The U.S. Navy developed this algorithm to help recruitment officers assess the physical fitness of service members. It relies on specific anatomical measurements to estimate body density, which is then converted into a fat percentage using the Siri equation. For men, the calculation focuses on the neck and waist. For women, it includes the hips to account for different fat distribution patterns.
Measurement Tips for Accuracy
Neck: Measure below the larynx, sloping slightly downward to the front.
Waist: For men, measure at the navel. For women, measure at the narrowest point of the natural waistline.
Hips (Women only): Measure at the widest horizontal circumference of the buttocks.
Technique: Ensure the tape is snug but does not compress the skin. Take measurements twice and use the average.
Body Fat Categories
Category
Men (%)
Women (%)
Essential Fat
2-5%
10-13%
Athletes
6-13%
14-20%
Fitness
14-17%
21-24%
Average
18-24%
25-31%
Obese
25%+
32%+
Example Calculation
A male standing 180 cm tall with a 40 cm neck and a 90 cm waist would have an estimated body fat percentage of approximately 19.5%. This puts him in the "Average" fitness category. If he reduces his waist circumference to 85 cm while maintaining his neck size, his body fat would drop to approximately 16.2%, moving him into the "Fitness" category.
function toggleHips() {
var gender = document.getElementById("gender").value;
var hipsContainer = document.getElementById("hips-container");
if (gender === "female") {
hipsContainer.style.display = "block";
} else {
hipsContainer.style.display = "none";
}
}
function calculateBFP() {
var gender = document.getElementById("gender").value;
var height = parseFloat(document.getElementById("height").value);
var neck = parseFloat(document.getElementById("neck").value);
var waist = parseFloat(document.getElementById("waist").value);
var hips = parseFloat(document.getElementById("hips").value);
var resultDiv = document.getElementById("bfp-result");
var bfpValueSpan = document.getElementById("bfp-value");
var bfpCategorySpan = document.getElementById("bfp-category");
if (isNaN(height) || isNaN(neck) || isNaN(waist) || (gender === "female" && isNaN(hips))) {
alert("Please enter all required measurements correctly.");
return;
}
var bfp = 0;
if (gender === "male") {
// Navy Formula for Men: 495 / (1.0324 – 0.19077 * log10(waist – neck) + 0.15456 * log10(height)) – 450
bfp = 495 / (1.0324 – 0.19077 * Math.log10(waist – neck) + 0.15456 * Math.log10(height)) – 450;
} else {
// Navy Formula for Women: 495 / (1.29579 – 0.35004 * log10(waist + hips – neck) + 0.22100 * log10(height)) – 450
bfp = 495 / (1.29579 – 0.35004 * Math.log10(waist + hips – neck) + 0.22100 * Math.log10(height)) – 450;
}
if (bfp < 2) bfp = 2; // Bottom cap for biological reality
bfpValueSpan.innerHTML = "Estimated Body Fat: " + bfp.toFixed(1) + "%";
var category = "";
var bgColor = "";
var textColor = "#fff";
if (gender === "male") {
if (bfp <= 5) { category = "Essential Fat"; bgColor = "#3498db"; }
else if (bfp <= 13) { category = "Athlete"; bgColor = "#2ecc71"; }
else if (bfp <= 17) { category = "Fitness"; bgColor = "#27ae60"; }
else if (bfp <= 24) { category = "Average"; bgColor = "#f1c40f"; textColor = "#333"; }
else { category = "Obese"; bgColor = "#e74c3c"; }
} else {
if (bfp <= 13) { category = "Essential Fat"; bgColor = "#3498db"; }
else if (bfp <= 20) { category = "Athlete"; bgColor = "#2ecc71"; }
else if (bfp <= 24) { category = "Fitness"; bgColor = "#27ae60"; }
else if (bfp <= 31) { category = "Average"; bgColor = "#f1c40f"; textColor = "#333"; }
else { category = "Obese"; bgColor = "#e74c3c"; }
}
bfpCategorySpan.innerHTML = "Category: " + category;
resultDiv.style.backgroundColor = bgColor;
resultDiv.style.color = textColor;
resultDiv.style.display = "block";
}