Body Fat Percentage Calculator Guide: The Navy Formulas, Constants, and Failure Modes

We rebuilt our own body fat calculator with a spreadsheet next to the code, and the exercise

found one discrepancy worth publishing, one edge case that mislabels a lean person, and one

input that breaks the display. This guide walks the actual formulas, then the failure modes,

so you know precisely what the number on screen means.

The two formulas our calculator runs

The component implements the US Navy circumference method, one expression per sex, with all

measurements entered in centimeters:


male:   bf = 86.010 * log10(waist - neck) - 70.041 * log10(height) + 36.76
female: bf = 163.205 * log10(waist + hip - neck) - 97.684 * log10(height) - 78.387

Weight never enters the percentage formula. It is used afterward for mass breakdowns: fat mass

is weight times the percentage, and lean mass is weight minus fat mass, both rounded to one

decimal. The female form needs a hip measurement, and the hip field only appears when female

is selected.

A worked male example

Use the placeholder values shipped in the component: height 175, weight 75, neck 38, waist 85.

1. log10(85 minus 38) is log10(47), about 1.6721, times 86.010 gives 143.82.

2. log10(175) is about 2.2430, times 70.041 gives 157.10.

3. 143.82 minus 157.10 plus 36.76 gives 23.47, which rounds and displays as 23.5 percent.

4. Fat mass is 75 times 23.5 percent, which is 17.6 kg after rounding.

5. Lean mass is 75 minus 17.6, which is 57.4 kg.

With the component's category table, 23.5 lands in the average band for men, 18 to 24.

The discrepancy we found, and how to use the tool around it

Here is the honest part. The constants above match the inch-based form of the Navy equations,

while our input fields are labeled centimeters. We tested this by computing the same body both

ways. The male example above, entered as centimeters directly, returns 23.5 percent. Convert

the same measurements to inches first (height 68.9, waist 33.5, neck 15.0) and the same

expression returns 17.0 percent.

For a female example of 165 cm, 62 kg, neck 33, waist 74, hip 95, the display shows 53.2

percent. Convert to inches, and the same formula returns 26.7 percent. The category label

flips from obese to average between the two readings.

The rule that follows is deterministic: pick one unit convention, enter everything in it every

time, and track the trend rather than the absolute value. The formula is monotonic, so a

falling input trend produces a falling result under either convention. Do not compare a

reading from our tool against a DEXA scan or a gym caliper chart and expect agreement at the

absolute level, and do not mix readings taken under different unit assumptions.

The category table, and the gap that mislabels

The component assigns categories with inclusive integer bounds. Men: essential fat 2 to 5,

athlete 6 to 13, fitness 14 to 17, average 18 to 24, obese 25 to 100. Women: 10 to 13, 14 to

20, 21 to 24, 25 to 31, and 32 to 100.

Because the percentage is rounded to one decimal, values like 5.5 or 13.6 fall between bounds

and match no range. The code then falls back to the last category. A man at 160 cm height,

neck 33, waist 60 computes to 5.5 percent, which is between essential fat and athlete, and the

fallback labels him obese. If your result sits right at a boundary, check whether the raw

value falls in one of these decimal gaps before believing the label.

Failure modes from the guards

The guard clauses reject any input that fails to parse or is zero or negative, and the female

path additionally rejects a missing or non-positive hip. Two consequences are visible:

  • Male mode ignores the hip field entirely, so two men with different hips get identical

results from identical neck, waist, and height.

  • If waist is less than or equal to neck for a man, the logarithm receives zero or a negative

number and the percentage becomes NaN, which the page prints as a broken value. A waist of

36 with a neck of 38 triggers it. Recheck the two measurements when you see it.

Age is not an input anywhere. The Navy equations have no age term, and our categories do not

shift with age, so expect the average band to fit a 25-year-old more tightly than a 65-year-old.

A measurement protocol that makes the trend real

The formula amplifies measurement error, because it takes logarithms of small differences.

Follow one sequence every time:

1. Measure in the morning, fasted, before training.

2. Neck at the base, slightly below the larynx, tape sloping down at the front.

3. Waist at the navel for men, at the narrowest point for women, tape snug and parallel to the

floor, relaxed exhale.

4. Hips at the widest point, only for the female calculation.

5. Write down all numbers with the date, in one unit convention you never change.

6. Recheck the pair waist minus neck, because that difference drives the male result most.

Checklist before you act on the number

  • All inputs are positive, waist exceeds neck, and female entries include hip.
  • Your reading does not sit on a category boundary decimal.
  • You use one unit convention across all readings you compare.
  • You compare monthly trends, not single absolutes.
  • You know the tool has no age input and no visceral fat information.
  • Clinical decisions go through a professional measurement, not a tape formula.

A tape measure costs little and this method tracks direction credibly. Absolute accuracy

claims belong to DEXA, and even those get audited. Use the tool for the trend, and let the

failure modes above tell you when to distrust the label.

What did your first month of readings look like, and did you enter centimeters or inches? We

want your data points for both conventions, because the discrepancy section above is exactly

the kind of claim that real measurements should confirm or kill. Run your numbers through our

[body fat calculator](https://webrecast.com/en/body-fat-calculator) and reproduce the worked

example before you trust your own.