Estimate your body composition using the US Navy Circumference Method.
Male
Female
Understanding the Body Fat Percentage (Navy Method)
The US Navy Body Fat Calculator provides an estimate of your body composition by using circumference measurements from specific points on the body. Developed by the Navy Health Research Center, this method is widely used because it is cost-effective and relatively accurate when compared to expensive DEXA scans or hydrostatic weighing.
How to Take Accurate Measurements
To get the most accurate results, use a flexible non-stretchable measuring tape and follow these guidelines:
Height: Measure while standing straight, barefoot, against a flat wall.
Neck: Measure just below the larynx (Adam's apple), sloping the tape slightly downward to the front.
Waist: For men, measure at the navel level. For women, measure at the narrowest point of the natural waistline.
Hips (Women only): Measure at the widest point of the buttocks.
Example Calculation
Suppose we have a male individual with the following measurements:
Height: 180 cm
Waist: 90 cm
Neck: 40 cm
Using the formula: 495 / (1.0324 - 0.19077 * log10(90 - 40) + 0.15456 * log10(180)) - 450, the estimated body fat would be approximately 17.5%.
Body Fat Categories
Description
Women (%)
Men (%)
Essential Fat
10-13%
2-5%
Athletes
14-20%
6-13%
Fitness
21-24%
14-17%
Average
25-31%
18-24%
Obese
32%+
25%+
function toggleHipField() {
var gender = document.getElementById("gender").value;
var hipContainer = document.getElementById("hip-container");
if (gender === "female") {
hipContainer.style.display = "block";
} else {
hipContainer.style.display = "none";
}
}
function calculateBodyFat() {
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 hip = parseFloat(document.getElementById("hip").value);
var resultArea = document.getElementById("result-area");
var bfValueDisplay = document.getElementById("bf-value");
var bfCategoryDisplay = document.getElementById("bf-category");
// Validation
if (isNaN(height) || isNaN(neck) || isNaN(waist) || height <= 0 || neck <= 0 || waist <= 0) {
alert("Please enter valid positive numbers for height, neck, and waist.");
return;
}
if (gender === "female" && (isNaN(hip) || hip <= 0)) {
alert("Please enter a valid positive number for hip measurements.");
return;
}
var bodyFat = 0;
if (gender === "male") {
// Formula for Men (Metric): 495 / (1.0324 – 0.19077 * log10(waist – neck) + 0.15456 * log10(height)) – 450
var logWaistNeck = Math.log10(waist – neck);
var logHeight = Math.log10(height);
bodyFat = 495 / (1.0324 – (0.19077 * logWaistNeck) + (0.15456 * logHeight)) – 450;
} else {
// Formula for Women (Metric): 495 / (1.29579 – 0.35004 * log10(waist + hip – neck) + 0.22100 * log10(height)) – 450
var logWaistHipNeck = Math.log10(waist + hip – neck);
var logHeightW = Math.log10(height);
bodyFat = 495 / (1.29579 – (0.35004 * logWaistHipNeck) + (0.22100 * logHeightW)) – 450;
}
if (bodyFat 100) bodyFat = 100;
var bfp = bodyFat.toFixed(1);
bfValueDisplay.innerHTML = bfp + "%";
// Determine Category
var category = "";
var color = "";
if (gender === "male") {
if (bfp < 6) { category = "Essential Fat"; color = "#3498db"; }
else if (bfp < 14) { category = "Athlete"; color = "#2ecc71"; }
else if (bfp < 18) { category = "Fitness"; color = "#27ae60"; }
else if (bfp < 25) { category = "Average"; color = "#f39c12"; }
else { category = "Obese"; color = "#e74c3c"; }
} else {
if (bfp < 14) { category = "Essential Fat"; color = "#3498db"; }
else if (bfp < 21) { category = "Athlete"; color = "#2ecc71"; }
else if (bfp < 25) { category = "Fitness"; color = "#27ae60"; }
else if (bfp < 32) { category = "Average"; color = "#f39c12"; }
else { category = "Obese"; color = "#e74c3c"; }
}
bfCategoryDisplay.innerHTML = "Category: " + category;
bfCategoryDisplay.style.color = color;
resultArea.style.display = "block";
resultArea.style.backgroundColor = "#fff";
resultArea.style.border = "2px solid " + color;
}