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.